[{"data":1,"prerenderedAt":3085},["ShallowReactive",2],{"wiki-page-/wiki/2024-03-30-linux-jiao-cheng/ch9-qi-ta-cao-zuo":3,"wiki-doc-items-/wiki/2024-03-30-linux-jiao-cheng/ch9-qi-ta-cao-zuo":3032},{"id":4,"title":5,"body":6,"chapter":3018,"chapterSort":3019,"date":3020,"description":31,"docKey":3021,"docRoot":3022,"docTitle":3023,"extension":3024,"isWikiDoc":1003,"isWikiIndex":3025,"layout":3026,"meta":3027,"navigation":1003,"path":3028,"seo":3029,"stem":3030,"wikiDepth":38,"__hash__":3031},"content/wiki/2024-03-30-Linux教程/ch9-其他操作.md","其他操作",{"type":7,"value":8,"toc":3009},"minimark",[9,13,17,25,186,189,239,242,246,250,256,259,262,265,270,273,276,279,285,288,293,296,299,304,307,312,315,318,323,326,331,334,350,353,356,368,371,380,383,386,395,398,407,410,413,422,425,428,449,452,455,464,469,472,475,484,487,496,499,508,511,520,525,528,536,541,544,553,556,564,569,572,581,584,587,591,594,599,602,607,622,627,632,643,648,654,659,674,679,682,687,692,697,705,710,717,722,733,738,741,744,747,750,755,758,780,785,788,797,802,805,829,832,863,866,871,874,889,894,913,916,919,924,936,941,946,949,954,957,972,975,980,985,989,994,1049,1052,1056,1062,1068,1073,1076,1083,1088,1095,1098,1101,1108,1123,1126,1189,1192,1207,1220,1310,1313,1316,1385,1388,1391,1394,1416,1419,1424,1429,1436,1441,1444,1448,1453,1458,1462,1465,1468,1511,1516,1519,1541,1556,1558,1563,1575,1635,1637,1639,1697,1699,1701,1704,1720,1725,1728,1733,1736,1739,1804,1809,1812,1814,1818,1830,1912,1914,1916,1974,1980,1982,1988,1993,1995,2000,2003,2024,2059,2063,2078,2081,2084,2087,2090,2098,2101,2114,2117,2132,2135,2154,2203,2206,2226,2229,2243,2249,2252,2261,2277,2289,2329,2334,2362,2367,2372,2402,2406,2410,2413,2418,2423,2436,2448,2451,2456,2471,2478,2511,2516,2534,2537,2541,2544,2548,2551,2555,2558,2562,2571,2577,2582,2594,2599,2604,2609,2636,2639,2644,2655,2660,2666,2671,2674,2679,2889,2893,2898,2903,2907,2912,2924,2932,2935,2940,2944,2949,2954,2959,2965,2970,2975,2980,2983,2986,2992,2997,3002,3005],[10,11,12],"h3",{"id":12},"工控机如何连wifi",[14,15,16],"p",{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,18,19,20,24],{},"进入工控机的硬盘目录，进入",[21,22,23],"code",{},"/etc/netplan/","，底下有很多yaml,找到一个最符合下方格式的yaml:",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-YAML shiki shiki-themes github-light github-dark","network: \n  version: 2 \n  wifis: \n    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96: \n      renderer: NetworkManager \n      match: \n        name: \"wlan0\" \n      dhcp4: true \n      dhcp6: true \n      access-points: \n        \"EMIS_Vinci_Robocon_5G\": \n          auth: \n            key-management: \"psk\" \n            password: \"vinci666\" \n          networkmanager: \n            uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n            name: \"EMIS_Vinci_Robocon_5G\" \n            passthrough: \n              wifi-security.auth-alg: \"open\" \n              ipv6.addr-gen-mode: \"default\" \n              ipv6.ip6-privacy: \"-1\" \n              proxy._: \"\" \n      networkmanager: \n        uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n        name: \"EMIS_Vinci_Robocon_5G\"\n\n","YAML","",[21,33,34,42,48,54,60,66,72,78,84,90,96,102,108,114,120,126,132,138,144,150,156,162,168,174,180],{"__ignoreMap":31},[35,36,39],"span",{"class":37,"line":38},"line",1,[35,40,41],{},"network: \n",[35,43,45],{"class":37,"line":44},2,[35,46,47],{},"  version: 2 \n",[35,49,51],{"class":37,"line":50},3,[35,52,53],{},"  wifis: \n",[35,55,57],{"class":37,"line":56},4,[35,58,59],{},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96: \n",[35,61,63],{"class":37,"line":62},5,[35,64,65],{},"      renderer: NetworkManager \n",[35,67,69],{"class":37,"line":68},6,[35,70,71],{},"      match: \n",[35,73,75],{"class":37,"line":74},7,[35,76,77],{},"        name: \"wlan0\" \n",[35,79,81],{"class":37,"line":80},8,[35,82,83],{},"      dhcp4: true \n",[35,85,87],{"class":37,"line":86},9,[35,88,89],{},"      dhcp6: true \n",[35,91,93],{"class":37,"line":92},10,[35,94,95],{},"      access-points: \n",[35,97,99],{"class":37,"line":98},11,[35,100,101],{},"        \"EMIS_Vinci_Robocon_5G\": \n",[35,103,105],{"class":37,"line":104},12,[35,106,107],{},"          auth: \n",[35,109,111],{"class":37,"line":110},13,[35,112,113],{},"            key-management: \"psk\" \n",[35,115,117],{"class":37,"line":116},14,[35,118,119],{},"            password: \"vinci666\" \n",[35,121,123],{"class":37,"line":122},15,[35,124,125],{},"          networkmanager: \n",[35,127,129],{"class":37,"line":128},16,[35,130,131],{},"            uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n",[35,133,135],{"class":37,"line":134},17,[35,136,137],{},"            name: \"EMIS_Vinci_Robocon_5G\" \n",[35,139,141],{"class":37,"line":140},18,[35,142,143],{},"            passthrough: \n",[35,145,147],{"class":37,"line":146},19,[35,148,149],{},"              wifi-security.auth-alg: \"open\" \n",[35,151,153],{"class":37,"line":152},20,[35,154,155],{},"              ipv6.addr-gen-mode: \"default\" \n",[35,157,159],{"class":37,"line":158},21,[35,160,161],{},"              ipv6.ip6-privacy: \"-1\" \n",[35,163,165],{"class":37,"line":164},22,[35,166,167],{},"              proxy._: \"\" \n",[35,169,171],{"class":37,"line":170},23,[35,172,173],{},"      networkmanager: \n",[35,175,177],{"class":37,"line":176},24,[35,178,179],{},"        uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n",[35,181,183],{"class":37,"line":182},25,[35,184,185],{},"        name: \"EMIS_Vinci_Robocon_5G\"\n",[14,187,188],{},"将其改为新wifi的名和密码：",[26,190,192],{"className":28,"code":191,"language":30,"meta":31,"style":31},"network:\n  version: 2\n  wifis:\n    wlan0:\n      dhcp4: true\n      dhcp6: true\n      access-points:\n        \"EMIS_Vinci_Robocon_5G\":\n          password: \"vinci666\"\n\n",[21,193,194,199,204,209,214,219,224,229,234],{"__ignoreMap":31},[35,195,196],{"class":37,"line":38},[35,197,198],{},"network:\n",[35,200,201],{"class":37,"line":44},[35,202,203],{},"  version: 2\n",[35,205,206],{"class":37,"line":50},[35,207,208],{},"  wifis:\n",[35,210,211],{"class":37,"line":56},[35,212,213],{},"    wlan0:\n",[35,215,216],{"class":37,"line":62},[35,217,218],{},"      dhcp4: true\n",[35,220,221],{"class":37,"line":68},[35,222,223],{},"      dhcp6: true\n",[35,225,226],{"class":37,"line":74},[35,227,228],{},"      access-points:\n",[35,230,231],{"class":37,"line":80},[35,232,233],{},"        \"EMIS_Vinci_Robocon_5G\":\n",[35,235,236],{"class":37,"line":86},[35,237,238],{},"          password: \"vinci666\"\n",[14,240,241],{},"工控机开机即可连上网。",[10,243,245],{"id":244},"ssh远程开发","SSH远程开发",[247,248,249],"h4",{"id":249},"环境准备",[14,251,252],{},[253,254,255],"strong",{},"1.硬件准备",[14,257,258],{},"首先要有一台工控机（X86小型电脑，专业工控机，树莓派等等）。",[14,260,261],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,263,264],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,266,267],{},[253,268,269],{},"2.设置固定IP",[14,271,272],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,274,275],{},"1.进入设置界面",[14,277,278],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,280,281],{},[282,283],"img",{"alt":31,"src":284},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image332.webp",[14,286,287],{},"2.配置所连接的网络",[14,289,290],{},[282,291],{"alt":31,"src":292},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image333.webp",[14,294,295],{},"3.设置固定IP",[14,297,298],{},"查看当前IP地址。",[14,300,301],{},[282,302],{"alt":31,"src":303},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image334.webp",[14,305,306],{},"设置固定IP。",[14,308,309],{},[282,310],{"alt":31,"src":311},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image335.webp",[14,313,314],{},"至此，IP配置完毕。",[247,316,317],{"id":317},"环境搭建",[14,319,320],{},[253,321,322],{},"概念",[14,324,325],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,327,328],{},[253,329,330],{},"实现",[14,332,333],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[335,336,337,341,344,347],"ol",{},[338,339,340],"li",{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[338,342,343],{},"远程主机启动SSH服务；",[338,345,346],{},"本地主机登陆远程主机；",[338,348,349],{},"实现数据传输。",[14,351,352],{},"1.安装SSH客户端与服务端",[14,354,355],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[26,357,362],{"className":358,"code":359,"language":360,"meta":361,"style":31},"language-Plain shiki shiki-themes github-light github-dark"," sudo apt install openssh-server\n","Plain","Text",[21,363,364],{"__ignoreMap":31},[35,365,366],{"class":37,"line":38},[35,367,359],{},[14,369,370],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[26,372,374],{"className":358,"code":373,"language":360,"meta":361,"style":31},"sudo apt install openssh-client\n",[21,375,376],{"__ignoreMap":31},[35,377,378],{"class":37,"line":38},[35,379,373],{},[14,381,382],{},"2.远程主机启动SSH服务",[14,384,385],{},"远程主机启动 ssh 服务命令如下：",[26,387,389],{"className":358,"code":388,"language":360,"meta":361,"style":31},"sudo /etc/init.d/ssh start\n",[21,390,391],{"__ignoreMap":31},[35,392,393],{"class":37,"line":38},[35,394,388],{},[14,396,397],{},"启动后可使用如下命令查看服务是否正常运行：",[26,399,401],{"className":358,"code":400,"language":360,"meta":361,"style":31},"ps -e | grep ssh\n",[21,402,403],{"__ignoreMap":31},[35,404,405],{"class":37,"line":38},[35,406,400],{},[14,408,409],{},"如果启动成功，会包含 sshd 程序。",[14,411,412],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[26,414,416],{"className":358,"code":415,"language":360,"meta":361,"style":31},"sudo systemctl enable ssh\n",[21,417,418],{"__ignoreMap":31},[35,419,420],{"class":37,"line":38},[35,421,415],{},[14,423,424],{},"3.本地远程登录",[14,426,427],{},"登录远程主机可以调用如下命令:",[26,429,433],{"className":430,"code":431,"language":432,"meta":31,"style":31},"language-bash shiki shiki-themes github-light github-dark","ssh -X 用户名@ip地址\n","bash",[21,434,435],{"__ignoreMap":31},[35,436,437,441,445],{"class":37,"line":38},[35,438,440],{"class":439},"sScJk","ssh",[35,442,444],{"class":443},"sj4cs"," -X",[35,446,448],{"class":447},"sZZnC"," 用户名@ip地址\n",[14,450,451],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,453,454],{},"如果退出，可以调用exit命令：",[26,456,458],{"className":358,"code":457,"language":360,"meta":361,"style":31},"exit\n",[21,459,460],{"__ignoreMap":31},[35,461,462],{"class":37,"line":38},[35,463,457],{},[14,465,466],{},[253,467,468],{},"4.实现数据传输",[14,470,471],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,473,474],{},"上传文件指令格式如下：",[26,476,478],{"className":358,"code":477,"language":360,"meta":361,"style":31},"scp 本地文件路径 账号@ip:路径\n",[21,479,480],{"__ignoreMap":31},[35,481,482],{"class":37,"line":38},[35,483,477],{},[14,485,486],{},"上传文件夹指令格式如下：",[26,488,490],{"className":358,"code":489,"language":360,"meta":361,"style":31},"scp -r 本地文件夹路径 账号@ip:路径\n",[21,491,492],{"__ignoreMap":31},[35,493,494],{"class":37,"line":38},[35,495,489],{},[14,497,498],{},"下载文件指令格式如下：",[26,500,502],{"className":358,"code":501,"language":360,"meta":361,"style":31},"scp 账号@ip:路径 本地文件夹路径\n",[21,503,504],{"__ignoreMap":31},[35,505,506],{"class":37,"line":38},[35,507,501],{},[14,509,510],{},"下载文件夹指令格式如下：",[26,512,514],{"className":358,"code":513,"language":360,"meta":361,"style":31},"scp -r 账号@ip:路径 本地文件夹路径\n",[21,515,516],{"__ignoreMap":31},[35,517,518],{"class":37,"line":38},[35,519,513],{},[14,521,522],{},[253,523,524],{},"优化",[14,526,527],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[335,529,530,533],{},[338,531,532],{},"本地生成密钥对；",[338,534,535],{},"将公钥上传至远程主机。",[14,537,538],{},[253,539,540],{},"1.生成密钥对",[14,542,543],{},"本地客户端生成公私钥：（一路回车默认即可）",[26,545,547],{"className":358,"code":546,"language":360,"meta":361,"style":31},"ssh-keygen\n",[21,548,549],{"__ignoreMap":31},[35,550,551],{"class":37,"line":38},[35,552,546],{},[14,554,555],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[335,557,558,561],{},[338,559,560],{},"id_rsa （私钥）；",[338,562,563],{},"id_rsa.pub (公钥)。",[14,565,566],{},[253,567,568],{},"2.公钥上传",[14,570,571],{},"上传指令如下：",[26,573,575],{"className":358,"code":574,"language":360,"meta":361,"style":31},"ssh-copy-id -i ~/.ssh/id_rsa.pub 账号@ip\n",[21,576,577],{"__ignoreMap":31},[35,578,579],{"class":37,"line":38},[35,580,574],{},[14,582,583],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,585,586],{},"以后再远程登录就无需录入密码了。",[247,588,590],{"id":589},"使用vscode优化","使用VScode优化",[14,592,593],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,595,596],{},[253,597,598],{},"1.准备工作",[14,600,601],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,603,604],{},[253,605,606],{},"2.为VScode安装远程开发插件",[14,608,609,610,613,614,617,618,621],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[21,611,612],{},"扩展：商店","的搜索栏输入",[21,615,616],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[21,619,620],{},"安装","。",[14,623,624],{},[282,625],{"alt":31,"src":626},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image336.webp",[14,628,629],{},[253,630,631],{},"3.配置远程连接",[14,633,634,635,638,639,642],{},"步骤1：使用快捷键",[21,636,637],{},"ctrl + shift + p","打开命令输入窗口，并输入",[21,640,641],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,644,645],{},[282,646],{"alt":31,"src":647},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image337.webp",[14,649,650,651,621],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[21,652,653],{},"Add New SSH Host",[14,655,656],{},[282,657],{"alt":31,"src":658},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image338.webp",[14,660,661,662,665,666,669,670,673],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[21,663,664],{},"ssh -X ubuntu@192.168.43.164","，其中，",[21,667,668],{},"ubuntu","需要替换为你的登录用户名，",[21,671,672],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,675,676],{},[282,677],{"alt":31,"src":678},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image339.webp",[14,680,681],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,683,684],{},[282,685],{"alt":31,"src":686},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image340.webp",[14,688,689],{},[282,690],{"alt":31,"src":691},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image341.webp",[14,693,694],{},[253,695,696],{},"4.使用",[14,698,699,700,638,702,704],{},"步骤1：继续使用快捷键",[21,701,637],{},[21,703,641],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,706,707],{},[282,708],{"alt":31,"src":709},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image342.webp",[14,711,712,713,716],{},"或者，也可以点击侧边栏的",[21,714,715],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,718,719],{},[282,720],{"alt":31,"src":721},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image343.webp",[14,723,724,725,728,729,732],{},"步骤2：选择菜单栏的",[21,726,727],{},"文件","下的",[21,730,731],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,734,735],{},[282,736],{"alt":31,"src":737},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image344.webp",[14,739,740],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[10,742,743],{"id":743},"远程桌面",[14,745,746],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,748,749],{},"我们选择使用VNC来看。",[335,751,752],{},[338,753,754],{},"安装VNC服务器：",[14,756,757],{},"这里以TigerVNC为例进行安装：",[26,759,761],{"className":430,"code":760,"language":432,"meta":31,"style":31},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[21,762,763],{"__ignoreMap":31},[35,764,765,768,771,774,777],{"class":37,"line":38},[35,766,767],{"class":439},"sudo",[35,769,770],{"class":447}," apt",[35,772,773],{"class":447}," install",[35,775,776],{"class":447}," tigervnc-standalone-server",[35,778,779],{"class":447}," tigervnc-common\n",[335,781,782],{"start":44},[338,783,784],{},"设置VNC密码：",[14,786,787],{},"为VNC用户设置密码，运行以下命令：",[26,789,791],{"className":430,"code":790,"language":432,"meta":31,"style":31},"vncpasswd\n",[21,792,793],{"__ignoreMap":31},[35,794,795],{"class":37,"line":38},[35,796,790],{"class":439},[335,798,799],{"start":50},[338,800,801],{},"配置VNC启动脚本:",[14,803,804],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[26,806,808],{"className":430,"code":807,"language":432,"meta":31,"style":31},"mkdir -p ~/.vnc\nnano ~/.vnc/xstartup\n",[21,809,810,821],{"__ignoreMap":31},[35,811,812,815,818],{"class":37,"line":38},[35,813,814],{"class":439},"mkdir",[35,816,817],{"class":443}," -p",[35,819,820],{"class":447}," ~/.vnc\n",[35,822,823,826],{"class":37,"line":44},[35,824,825],{"class":439},"nano",[35,827,828],{"class":447}," ~/.vnc/xstartup\n",[14,830,831],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[26,833,835],{"className":430,"code":834,"language":432,"meta":31,"style":31},"#!/bin/sh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[21,836,837,843,851,858],{"__ignoreMap":31},[35,838,839],{"class":37,"line":38},[35,840,842],{"class":841},"sJ8bj","#!/bin/sh\n",[35,844,845,848],{"class":37,"line":44},[35,846,847],{"class":443},"unset",[35,849,850],{"class":447}," SESSION_MANAGER\n",[35,852,853,855],{"class":37,"line":50},[35,854,847],{"class":443},[35,856,857],{"class":447}," DBUS_SESSION_BUS_ADDRESS\n",[35,859,860],{"class":37,"line":56},[35,861,862],{"class":439},"gnome-session\n",[14,864,865],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[335,867,868],{"start":56},[338,869,870],{},"给予执行权限：",[14,872,873],{},"为xstartup文件设置执行权限：",[26,875,877],{"className":430,"code":876,"language":432,"meta":31,"style":31},"chmod +x ~/.vnc/xstartup\n",[21,878,879],{"__ignoreMap":31},[35,880,881,884,887],{"class":37,"line":38},[35,882,883],{"class":439},"chmod",[35,885,886],{"class":447}," +x",[35,888,828],{"class":447},[335,890,891],{"start":62},[338,892,893],{},"启动VNC服务器：",[26,895,897],{"className":430,"code":896,"language":432,"meta":31,"style":31},"vncserver -geometry 1920x1080 -localhost=0\n",[21,898,899],{"__ignoreMap":31},[35,900,901,904,907,910],{"class":37,"line":38},[35,902,903],{"class":439},"vncserver",[35,905,906],{"class":443}," -geometry",[35,908,909],{"class":447}," 1920x1080",[35,911,912],{"class":443}," -localhost=0\n",[14,914,915],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,917,918],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[335,920,921],{"start":68},[338,922,923],{},"查看已开启的VNC服务器：",[26,925,927],{"className":430,"code":926,"language":432,"meta":31,"style":31},"vncserver -list\n",[21,928,929],{"__ignoreMap":31},[35,930,931,933],{"class":37,"line":38},[35,932,903],{"class":439},[35,934,935],{"class":443}," -list\n",[14,937,938],{},[282,939],{"alt":31,"src":940},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image345.webp",[335,942,943],{"start":74},[338,944,945],{},"连接到VNC服务器：",[14,947,948],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[335,950,951],{"start":80},[338,952,953],{},"停止VNC服务器：",[14,955,956],{},"如果需要停止VNC服务器，可以使用以下命令：",[26,958,960],{"className":430,"code":959,"language":432,"meta":31,"style":31},"vncserver -kill :1\n",[21,961,962],{"__ignoreMap":31},[35,963,964,966,969],{"class":37,"line":38},[35,965,903],{"class":439},[35,967,968],{"class":443}," -kill",[35,970,971],{"class":447}," :1\n",[14,973,974],{},"将:1替换为你实际使用的显示编号。",[14,976,977],{},[282,978],{"alt":31,"src":979},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image346.webp",[14,981,982],{},[282,983],{"alt":31,"src":984},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image347.webp",[10,986,988],{"id":987},"usb端口设置","USB端口设置",[14,990,991],{},[253,992,993],{},"首先先配置好权限",[26,995,997],{"className":430,"code":996,"language":432,"meta":31,"style":31},"\n# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[21,998,999,1005,1010,1027,1035,1039,1044],{"__ignoreMap":31},[35,1000,1001],{"class":37,"line":38},[35,1002,1004],{"emptyLinePlaceholder":1003},true,"\n",[35,1006,1007],{"class":37,"line":44},[35,1008,1009],{"class":841},"# 将用户权限提高\n",[35,1011,1012,1014,1017,1020,1023],{"class":37,"line":50},[35,1013,767],{"class":439},[35,1015,1016],{"class":447}," usermod",[35,1018,1019],{"class":443}," -aG",[35,1021,1022],{"class":447}," dialout",[35,1024,1026],{"class":1025},"sVt8B"," $USER\n",[35,1028,1029,1032],{"class":37,"line":56},[35,1030,1031],{"class":439},"newgrp",[35,1033,1034],{"class":447}," dialout\n",[35,1036,1037],{"class":37,"line":62},[35,1038,1004],{"emptyLinePlaceholder":1003},[35,1040,1041],{"class":37,"line":68},[35,1042,1043],{"class":841},"# 查看下面命令是否输出dialout（若输出才正常）\n",[35,1045,1046],{"class":37,"line":74},[35,1047,1048],{"class":439},"groups\n",[14,1050,1051],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[247,1053,1055],{"id":1054},"根据usb设备绑定端口多个不同设备","根据USB设备绑定端口(多个不同设备)",[14,1057,1058,1061],{},[253,1059,1060],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,1063,1064,1067],{},[253,1065,1066],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,1069,1070],{},[253,1071,1072],{},"流程如下：",[14,1074,1075],{},"（1）.查找设备idVendor和idProduct",[14,1077,1078,1079,1082],{},"接入两个USB设备，在终端调用指令",[21,1080,1081],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,1084,1085],{},[282,1086],{"alt":31,"src":1087},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image348.webp",[14,1089,1090,1091,1094],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[21,1092,1093],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,1096,1097],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,1099,1100],{},"（2）.编写映射规则",[14,1102,1103,1104,1107],{},"在",[21,1105,1106],{},"/etc/udev/rules.d","目录下新建文件xxx.rules（文件名自定义）",[26,1109,1111],{"className":430,"code":1110,"language":432,"meta":31,"style":31},"sudo vim /etc/udev/rules.d/xxx.rules\n",[21,1112,1113],{"__ignoreMap":31},[35,1114,1115,1117,1120],{"class":37,"line":38},[35,1116,767],{"class":439},[35,1118,1119],{"class":447}," vim",[35,1121,1122],{"class":447}," /etc/udev/rules.d/xxx.rules\n",[14,1124,1125],{},"输入如下内容：",[26,1127,1129],{"className":430,"code":1128,"language":432,"meta":31,"style":31},"KERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"10c4\", ATTRS{idProduct}==\"ea60\", MODE:=\"0777\", SYMLINK+=\"mylidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"mycar\"\n",[21,1130,1131,1164],{"__ignoreMap":31},[35,1132,1133,1136,1140,1143,1146,1149,1152,1155,1158,1161],{"class":37,"line":38},[35,1134,1135],{"class":1025},"KERNEL",[35,1137,1139],{"class":1138},"szBVR","=",[35,1141,1142],{"class":447},"=\"ttyUSB*\",",[35,1144,1145],{"class":439}," ATTRS",[35,1147,1148],{"class":447},"{idVendor}==",[35,1150,1151],{"class":439},"\"10c4\"",[35,1153,1154],{"class":439},",",[35,1156,1157],{"class":447}," ATTRS{idProduct}==\"ea60\",",[35,1159,1160],{"class":447}," MODE:=\"0777\",",[35,1162,1163],{"class":447}," SYMLINK+=\"mylidar\"\n",[35,1165,1166,1168,1170,1172,1174,1176,1179,1181,1184,1186],{"class":37,"line":44},[35,1167,1135],{"class":1025},[35,1169,1139],{"class":1138},[35,1171,1142],{"class":447},[35,1173,1145],{"class":439},[35,1175,1148],{"class":447},[35,1177,1178],{"class":439},"\"1a86\"",[35,1180,1154],{"class":439},[35,1182,1183],{"class":447}," ATTRS{idProduct}==\"7523\",",[35,1185,1160],{"class":447},[35,1187,1188],{"class":447}," SYMLINK+=\"mycar\"\n",[14,1190,1191],{},"代码解释：",[1193,1194,1195,1198,1201,1204],"ul",{},[338,1196,1197],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[338,1199,1200],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[338,1202,1203],{},"SYMLINK是符号连接，即绑定的别名；",[338,1205,1206],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,1208,1209,1210,1214,1217],{},"***小提示：***",[1211,1212,1213],"em",{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[21,1215,1216],{},"/etc/udev/rule.d",[1211,1218,1219],{},"目录即可。",[1221,1222,1223,1240],"table",{},[1224,1225,1226],"thead",{},[1227,1228,1229,1234,1237],"tr",{},[1230,1231,1233],"th",{"align":1232},"left","设备类型",[1230,1235,1236],{"align":1232},"内核名称示例",[1230,1238,1239],{"align":1232},"说明",[1241,1242,1243,1255,1266,1277,1288,1299],"tbody",{},[1227,1244,1245,1249,1252],{},[1246,1247,1248],"td",{"align":1232},"USB 串口设备",[1246,1250,1251],{"align":1232},"ttyUSB*",[1246,1253,1254],{"align":1232},"USB 转串口设备，如 /dev/ttyUSB0",[1227,1256,1257,1260,1263],{},[1246,1258,1259],{"align":1232},"串口设备",[1246,1261,1262],{"align":1232},"ttyS*",[1246,1264,1265],{"align":1232},"物理串口设备，如 /dev/ttyS0",[1227,1267,1268,1271,1274],{},[1246,1269,1270],{"align":1232},"存储设备",[1246,1272,1273],{"align":1232},"sd*",[1246,1275,1276],{"align":1232},"SCSI 磁盘设备，如 /dev/sda",[1227,1278,1279,1282,1285],{},[1246,1280,1281],{"align":1232},"网络设备",[1246,1283,1284],{"align":1232},"eth*",[1246,1286,1287],{"align":1232},"以太网设备，如 /dev/eth0",[1227,1289,1290,1293,1296],{},[1246,1291,1292],{"align":1232},"输入设备",[1246,1294,1295],{"align":1232},"event*",[1246,1297,1298],{"align":1232},"输入事件设备，如 /dev/input/event0",[1227,1300,1301,1304,1307],{},[1246,1302,1303],{"align":1232},"蓝牙设备",[1246,1305,1306],{"align":1232},"rfcomm*",[1246,1308,1309],{"align":1232},"蓝牙串口设备，如 /dev/rfcomm0",[14,1311,1312],{},"（3）.使规则生效",[14,1314,1315],{},"在终端下输入如下指令：",[26,1317,1319],{"className":430,"code":1318,"language":432,"meta":31,"style":31},"\n# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[21,1320,1321,1325,1330,1343,1354,1358,1363,1376],{"__ignoreMap":31},[35,1322,1323],{"class":37,"line":38},[35,1324,1004],{"emptyLinePlaceholder":1003},[35,1326,1327],{"class":37,"line":44},[35,1328,1329],{"class":841},"# Ubuntu用下方命令\n",[35,1331,1332,1334,1337,1340],{"class":37,"line":50},[35,1333,767],{"class":439},[35,1335,1336],{"class":447}," service",[35,1338,1339],{"class":447}," udev",[35,1341,1342],{"class":447}," reload\n",[35,1344,1345,1347,1349,1351],{"class":37,"line":56},[35,1346,767],{"class":439},[35,1348,1336],{"class":447},[35,1350,1339],{"class":447},[35,1352,1353],{"class":447}," restart\n",[35,1355,1356],{"class":37,"line":62},[35,1357,1004],{"emptyLinePlaceholder":1003},[35,1359,1360],{"class":37,"line":68},[35,1361,1362],{"class":841},"#Fedora用下方命令\n",[35,1364,1365,1367,1370,1373],{"class":37,"line":74},[35,1366,767],{"class":439},[35,1368,1369],{"class":447}," udevadm",[35,1371,1372],{"class":447}," control",[35,1374,1375],{"class":443}," --reload\n",[35,1377,1378,1380,1382],{"class":37,"line":80},[35,1379,767],{"class":439},[35,1381,1369],{"class":447},[35,1383,1384],{"class":447}," trigger\n",[14,1386,1387],{},"再重新插拔设备即可。",[14,1389,1390],{},"（4）.测试",[14,1392,1393],{},"终端下输入如下指令",[26,1395,1397],{"className":430,"code":1396,"language":432,"meta":31,"style":31},"ll /dev | grep ttyUSB\n",[21,1398,1399],{"__ignoreMap":31},[35,1400,1401,1404,1407,1410,1413],{"class":37,"line":38},[35,1402,1403],{"class":439},"ll",[35,1405,1406],{"class":447}," /dev",[35,1408,1409],{"class":1138}," |",[35,1411,1412],{"class":439}," grep",[35,1414,1415],{"class":447}," ttyUSB\n",[14,1417,1418],{},"运行结果如下：",[14,1420,1421],{},[282,1422],{"alt":31,"src":1423},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image349.webp",[14,1425,1426],{},[282,1427],{"alt":31,"src":1428},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image350.webp",[14,1430,1431,1432,1435],{},"也可以多次插拔USB设备，会发现设备端口",[21,1433,1434],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,1437,1438],{},[253,1439,1440],{},"缺点：",[14,1442,1443],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[247,1445,1447],{"id":1446},"根据主机硬件绑定端口多个相同设备","根据主机硬件绑定端口（多个相同设备)",[14,1449,1450,1452],{},[253,1451,1060],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,1454,1455,1457],{},[253,1456,1066],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,1459,1460],{},[253,1461,1072],{},[14,1463,1464],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,1466,1467],{},"调用如下指令查看第一台雷达的USB信息：",[26,1469,1471],{"className":430,"code":1470,"language":432,"meta":31,"style":31},"udevadm info --attribute-walk --name=/dev/ttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=/dev/ttyACM0 | grep KERNELS\n",[21,1472,1473,1494],{"__ignoreMap":31},[35,1474,1475,1478,1481,1484,1487,1489,1491],{"class":37,"line":38},[35,1476,1477],{"class":439},"udevadm",[35,1479,1480],{"class":447}," info",[35,1482,1483],{"class":443}," --attribute-walk",[35,1485,1486],{"class":443}," --name=/dev/ttyUSB0",[35,1488,1409],{"class":1138},[35,1490,1412],{"class":439},[35,1492,1493],{"class":447}," KERNELS\n",[35,1495,1496,1498,1500,1502,1505,1507,1509],{"class":37,"line":44},[35,1497,1477],{"class":439},[35,1499,1480],{"class":447},[35,1501,1483],{"class":443},[35,1503,1504],{"class":443}," --name=/dev/ttyACM0",[35,1506,1409],{"class":1138},[35,1508,1412],{"class":439},[35,1510,1493],{"class":447},[14,1512,1513],{},[282,1514],{"alt":31,"src":1515},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image351.webp",[14,1517,1518],{},"调用如下指令查看第二台雷达的USB信息：",[26,1520,1522],{"className":430,"code":1521,"language":432,"meta":31,"style":31},"udevadm info --attribute-walk --name=/dev/ttyUSB1 | grep KERNELS\n",[21,1523,1524],{"__ignoreMap":31},[35,1525,1526,1528,1530,1532,1535,1537,1539],{"class":37,"line":38},[35,1527,1477],{"class":439},[35,1529,1480],{"class":447},[35,1531,1483],{"class":443},[35,1533,1534],{"class":443}," --name=/dev/ttyUSB1",[35,1536,1409],{"class":1138},[35,1538,1412],{"class":439},[35,1540,1493],{"class":447},[14,1542,1543,1544,1547,1548,1551,1552,1555],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[21,1545,1546],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[21,1549,1550],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[253,1553,1554],{},"唯一性标识","”。",[14,1557,1100],{},[14,1559,1103,1560,1562],{},[21,1561,1106],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[26,1564,1565],{"className":430,"code":1110,"language":432,"meta":31,"style":31},[21,1566,1567],{"__ignoreMap":31},[35,1568,1569,1571,1573],{"class":37,"line":38},[35,1570,767],{"class":439},[35,1572,1119],{"class":447},[35,1574,1122],{"class":447},[26,1576,1578],{"className":430,"code":1577,"language":432,"meta":31,"style":31},"KERNEL==\"ttyUSB*\", KERNELS==\"1-1.3:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_front\"\nKERNEL==\"ttyUSB*\", KERNELS==\"1-1.4:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_back\"\n",[21,1579,1580,1609],{"__ignoreMap":31},[35,1581,1582,1584,1586,1588,1591,1593,1596,1599,1601,1604,1606],{"class":37,"line":38},[35,1583,1135],{"class":1025},[35,1585,1139],{"class":1138},[35,1587,1142],{"class":447},[35,1589,1590],{"class":1025}," KERNELS",[35,1592,1139],{"class":1138},[35,1594,1595],{"class":447},"=\"1-1.3:1.0\",",[35,1597,1598],{"class":439}," MODE:",[35,1600,1139],{"class":447},[35,1602,1603],{"class":439},"\"0777\"",[35,1605,1154],{"class":439},[35,1607,1608],{"class":447}," SYMLINK+=\"rplidar_front\"\n",[35,1610,1611,1613,1615,1617,1619,1621,1624,1626,1628,1630,1632],{"class":37,"line":44},[35,1612,1135],{"class":1025},[35,1614,1139],{"class":1138},[35,1616,1142],{"class":447},[35,1618,1590],{"class":1025},[35,1620,1139],{"class":1138},[35,1622,1623],{"class":447},"=\"1-1.4:1.0\",",[35,1625,1598],{"class":439},[35,1627,1139],{"class":447},[35,1629,1603],{"class":439},[35,1631,1154],{"class":439},[35,1633,1634],{"class":447}," SYMLINK+=\"rplidar_back\"\n",[14,1636,1312],{},[14,1638,1315],{},[26,1640,1641],{"className":430,"code":1318,"language":432,"meta":31,"style":31},[21,1642,1643,1647,1651,1661,1671,1675,1679,1689],{"__ignoreMap":31},[35,1644,1645],{"class":37,"line":38},[35,1646,1004],{"emptyLinePlaceholder":1003},[35,1648,1649],{"class":37,"line":44},[35,1650,1329],{"class":841},[35,1652,1653,1655,1657,1659],{"class":37,"line":50},[35,1654,767],{"class":439},[35,1656,1336],{"class":447},[35,1658,1339],{"class":447},[35,1660,1342],{"class":447},[35,1662,1663,1665,1667,1669],{"class":37,"line":56},[35,1664,767],{"class":439},[35,1666,1336],{"class":447},[35,1668,1339],{"class":447},[35,1670,1353],{"class":447},[35,1672,1673],{"class":37,"line":62},[35,1674,1004],{"emptyLinePlaceholder":1003},[35,1676,1677],{"class":37,"line":68},[35,1678,1362],{"class":841},[35,1680,1681,1683,1685,1687],{"class":37,"line":74},[35,1682,767],{"class":439},[35,1684,1369],{"class":447},[35,1686,1372],{"class":447},[35,1688,1375],{"class":443},[35,1690,1691,1693,1695],{"class":37,"line":80},[35,1692,767],{"class":439},[35,1694,1369],{"class":447},[35,1696,1384],{"class":447},[14,1698,1387],{},[14,1700,1390],{},[14,1702,1703],{},"终端下输入如下指令，运行结果如下：",[26,1705,1706],{"className":430,"code":1396,"language":432,"meta":31,"style":31},[21,1707,1708],{"__ignoreMap":31},[35,1709,1710,1712,1714,1716,1718],{"class":37,"line":38},[35,1711,1403],{"class":439},[35,1713,1406],{"class":447},[35,1715,1409],{"class":1138},[35,1717,1412],{"class":439},[35,1719,1415],{"class":447},[14,1721,1722],{},[282,1723],{"alt":31,"src":1724},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image352.webp",[14,1726,1727],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,1729,1730,1732],{},[253,1731,1440],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[247,1734,1735],{"id":1735},"根据其他属性绑定端口",[14,1737,1738],{},"（1）.查看所连接的主机USB接口的信息",[26,1740,1742],{"className":430,"code":1741,"language":432,"meta":31,"style":31},"udevadm info -a -p $(udevadm info -q path -n /dev/ttyACM0)\nudevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)\n",[21,1743,1744,1777],{"__ignoreMap":31},[35,1745,1746,1748,1750,1753,1755,1758,1760,1762,1765,1768,1771,1774],{"class":37,"line":38},[35,1747,1477],{"class":439},[35,1749,1480],{"class":447},[35,1751,1752],{"class":443}," -a",[35,1754,817],{"class":443},[35,1756,1757],{"class":1025}," $(",[35,1759,1477],{"class":439},[35,1761,1480],{"class":447},[35,1763,1764],{"class":443}," -q",[35,1766,1767],{"class":447}," path",[35,1769,1770],{"class":443}," -n",[35,1772,1773],{"class":447}," /dev/ttyACM0",[35,1775,1776],{"class":1025},")\n",[35,1778,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799,1802],{"class":37,"line":44},[35,1780,1477],{"class":439},[35,1782,1480],{"class":447},[35,1784,1752],{"class":443},[35,1786,817],{"class":443},[35,1788,1757],{"class":1025},[35,1790,1477],{"class":439},[35,1792,1480],{"class":447},[35,1794,1764],{"class":443},[35,1796,1767],{"class":447},[35,1798,1770],{"class":443},[35,1800,1801],{"class":447}," /dev/ttyUSB0",[35,1803,1776],{"class":1025},[14,1805,1806],{},[282,1807],{"alt":31,"src":1808},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image353.webp",[14,1810,1811],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,1813,1100],{},[14,1815,1103,1816,1562],{},[21,1817,1106],{},[26,1819,1820],{"className":430,"code":1110,"language":432,"meta":31,"style":31},[21,1821,1822],{"__ignoreMap":31},[35,1823,1824,1826,1828],{"class":37,"line":38},[35,1825,767],{"class":439},[35,1827,1119],{"class":447},[35,1829,1122],{"class":447},[26,1831,1833],{"className":430,"code":1832,"language":432,"meta":31,"style":31},"KERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0001\", MODE:=\"0777\", SYMLINK+=\"ttyACM_Lidar\"\nKERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0002\", MODE:=\"0777\", SYMLINK+=\"ttyACM_MCU\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"ttyUSB_IMU\"\n",[21,1834,1835,1863,1889],{"__ignoreMap":31},[35,1836,1837,1839,1841,1844,1846,1848,1850,1852,1855,1858,1860],{"class":37,"line":38},[35,1838,1135],{"class":1025},[35,1840,1139],{"class":1138},[35,1842,1843],{"class":447},"=\"ttyACM*\",",[35,1845,1145],{"class":439},[35,1847,1148],{"class":447},[35,1849,1178],{"class":439},[35,1851,1154],{"class":439},[35,1853,1854],{"class":447}," ATTRS{idProduct}==\"55d4\",",[35,1856,1857],{"class":447}," ATTRS{serial}==\"0001\",",[35,1859,1160],{"class":447},[35,1861,1862],{"class":447}," SYMLINK+=\"ttyACM_Lidar\"\n",[35,1864,1865,1867,1869,1871,1873,1875,1877,1879,1881,1884,1886],{"class":37,"line":44},[35,1866,1135],{"class":1025},[35,1868,1139],{"class":1138},[35,1870,1843],{"class":447},[35,1872,1145],{"class":439},[35,1874,1148],{"class":447},[35,1876,1178],{"class":439},[35,1878,1154],{"class":439},[35,1880,1854],{"class":447},[35,1882,1883],{"class":447}," ATTRS{serial}==\"0002\",",[35,1885,1160],{"class":447},[35,1887,1888],{"class":447}," SYMLINK+=\"ttyACM_MCU\"\n",[35,1890,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909],{"class":37,"line":50},[35,1892,1135],{"class":1025},[35,1894,1139],{"class":1138},[35,1896,1142],{"class":447},[35,1898,1145],{"class":439},[35,1900,1148],{"class":447},[35,1902,1178],{"class":439},[35,1904,1154],{"class":439},[35,1906,1183],{"class":447},[35,1908,1160],{"class":447},[35,1910,1911],{"class":447}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,1913,1312],{},[14,1915,1315],{},[26,1917,1918],{"className":430,"code":1318,"language":432,"meta":31,"style":31},[21,1919,1920,1924,1928,1938,1948,1952,1956,1966],{"__ignoreMap":31},[35,1921,1922],{"class":37,"line":38},[35,1923,1004],{"emptyLinePlaceholder":1003},[35,1925,1926],{"class":37,"line":44},[35,1927,1329],{"class":841},[35,1929,1930,1932,1934,1936],{"class":37,"line":50},[35,1931,767],{"class":439},[35,1933,1336],{"class":447},[35,1935,1339],{"class":447},[35,1937,1342],{"class":447},[35,1939,1940,1942,1944,1946],{"class":37,"line":56},[35,1941,767],{"class":439},[35,1943,1336],{"class":447},[35,1945,1339],{"class":447},[35,1947,1353],{"class":447},[35,1949,1950],{"class":37,"line":62},[35,1951,1004],{"emptyLinePlaceholder":1003},[35,1953,1954],{"class":37,"line":68},[35,1955,1362],{"class":841},[35,1957,1958,1960,1962,1964],{"class":37,"line":74},[35,1959,767],{"class":439},[35,1961,1369],{"class":447},[35,1963,1372],{"class":447},[35,1965,1375],{"class":443},[35,1967,1968,1970,1972],{"class":37,"line":80},[35,1969,767],{"class":439},[35,1971,1369],{"class":447},[35,1973,1384],{"class":447},[14,1975,1976,1977],{},"再重新插拔设备即可，或者 ",[253,1978,1979],{},"直接重启系统。",[14,1981,1390],{},[14,1983,1393,1984,1987],{},[21,1985,1986],{},"ll /dev | grep ttyUSB","，运行结果如下：",[14,1989,1990],{},[282,1991],{"alt":31,"src":1992},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/image354.webp",[14,1994,1727],{},[14,1996,1997,1999],{},[253,1998,1440],{}," 一些设备可能没有串口号等。",[247,2001,2002],{"id":2002},"其他注意事项",[14,2004,2005,2006,2008,2009,2012,2013,2016,2017,2020,2021,2023],{},"并非所有的USB设备端口号都是",[21,2007,1434],{},"的格式，比如Arduino的端口号可能是",[21,2010,2011],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[21,2014,2015],{},"videon","和",[21,2018,2019],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[21,2022,2015],{},"端口，绑定时需要关联的也是该接口。",[14,2025,2026,2027,2030,2031,2034,2035,2037,2038,2041,2042,2045,2046,2049,2050,2049,2053,2049,2056,621],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[21,2028,2029],{},"KERNEL==\"ttyUSB*\"","修改为",[21,2032,2033],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[21,2036,2029],{},"修改为类似于",[21,2039,2040],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[21,2043,2044],{},"video[0,2,4,6]","表示可以绑定的端口为",[21,2047,2048],{},"video0","或",[21,2051,2052],{},"video2",[21,2054,2055],{},"video4",[21,2057,2058],{},"video6",[10,2060,2062],{"id":2061},"linux分区gui工具","Linux分区Gui工具",[26,2064,2066],{"className":358,"code":2065,"language":360,"meta":361,"style":31},"sudo apt install gparted\nsudo dnf install gparted\n",[21,2067,2068,2073],{"__ignoreMap":31},[35,2069,2070],{"class":37,"line":38},[35,2071,2072],{},"sudo apt install gparted\n",[35,2074,2075],{"class":37,"line":44},[35,2076,2077],{},"sudo dnf install gparted\n",[10,2079,2080],{"id":2080},"挂载内网网页",[14,2082,2083],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,2085,2086],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,2088,2089],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,2091,2092],{},[2093,2094,2095],"a",{"href":2095,"rel":2096},"https://github.com/termux/termux-app",[2097],"nofollow",[14,2099,2100],{},"首先打开app后，先更新软件缓存：",[26,2102,2104],{"className":430,"code":2103,"language":432,"meta":31,"style":31},"pkg update\n",[21,2105,2106],{"__ignoreMap":31},[35,2107,2108,2111],{"class":37,"line":38},[35,2109,2110],{"class":439},"pkg",[35,2112,2113],{"class":447}," update\n",[14,2115,2116],{},"然后换源",[26,2118,2120],{"className":430,"code":2119,"language":432,"meta":31,"style":31},"nano $PREFIX/etc/apt/sources.list\n",[21,2121,2122],{"__ignoreMap":31},[35,2123,2124,2126,2129],{"class":37,"line":38},[35,2125,825],{"class":439},[35,2127,2128],{"class":1025}," $PREFIX",[35,2130,2131],{"class":447},"/etc/apt/sources.list\n",[14,2133,2134],{},"将该文件内容替换为下面：",[26,2136,2138],{"className":430,"code":2137,"language":432,"meta":31,"style":31},"deb https://mirrors.bfsu.edu.cn/termux/termux-packages-24 stable main\n",[21,2139,2140],{"__ignoreMap":31},[35,2141,2142,2145,2148,2151],{"class":37,"line":38},[35,2143,2144],{"class":439},"deb",[35,2146,2147],{"class":447}," https://mirrors.bfsu.edu.cn/termux/termux-packages-24",[35,2149,2150],{"class":447}," stable",[35,2152,2153],{"class":447}," main\n",[1193,2155,2156,2183],{},[338,2157,2158,2159,2161,2162],{},"如果你使用的是",[21,2160,825],{},"编辑器：",[1193,2163,2164,2171,2177],{},[338,2165,2166,2167,2170],{},"按 ",[21,2168,2169],{},"Ctrl+O"," 保存文件。",[338,2172,2166,2173,2176],{},[21,2174,2175],{},"Enter"," 确认文件名。",[338,2178,2166,2179,2182],{},[21,2180,2181],{},"Ctrl+X"," 退出编辑器。",[338,2184,2158,2185,2161,2188],{},[21,2186,2187],{},"vim",[1193,2189,2190,2196],{},[338,2191,2166,2192,2195],{},[21,2193,2194],{},"Esc"," 退出编辑模式。",[338,2197,2198,2199,2202],{},"输入 ",[21,2200,2201],{},":wq"," 保存并退出。",[14,2204,2205],{},"接下来重新更新软件源：",[26,2207,2209],{"className":430,"code":2208,"language":432,"meta":31,"style":31},"pkg update && pkg upgrade\n",[21,2210,2211],{"__ignoreMap":31},[35,2212,2213,2215,2218,2221,2223],{"class":37,"line":38},[35,2214,2110],{"class":439},[35,2216,2217],{"class":447}," update",[35,2219,2220],{"class":1025}," && ",[35,2222,2110],{"class":439},[35,2224,2225],{"class":447}," upgrade\n",[14,2227,2228],{},"安装python：",[26,2230,2232],{"className":430,"code":2231,"language":432,"meta":31,"style":31},"pkg install python3\n",[21,2233,2234],{"__ignoreMap":31},[35,2235,2236,2238,2240],{"class":37,"line":38},[35,2237,2110],{"class":439},[35,2239,773],{"class":447},[35,2241,2242],{"class":447}," python3\n",[14,2244,2245,2248],{},[253,2246,2247],{},"通过Termux访问设备存储"," ：",[14,2250,2251],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[26,2253,2255],{"className":430,"code":2254,"language":432,"meta":31,"style":31},"termux-setup-storage\n",[21,2256,2257],{"__ignoreMap":31},[35,2258,2259],{"class":37,"line":38},[35,2260,2254],{"class":439},[335,2262,2263],{},[338,2264,2265,2248,2268],{},[253,2266,2267],{},"进入HTML文件所在的目录",[335,2269,2270],{},[338,2271,2272,2273,2276],{},"使用",[21,2274,2275],{},"cd","命令进入HTML文件所在的目录：",[26,2278,2280],{"className":430,"code":2279,"language":432,"meta":31,"style":31},"cd ~/your_html_folder\n",[21,2281,2282],{"__ignoreMap":31},[35,2283,2284,2286],{"class":37,"line":38},[35,2285,2275],{"class":443},[35,2287,2288],{"class":447}," ~/your_html_folder\n",[335,2290,2291],{"start":44},[338,2292,2293,2248,2296,2301,2320],{},[253,2294,2295],{},"启动Python HTTP服务器",[335,2297,2298],{},[338,2299,2300],{},"运行以下命令启动一个简单的HTTP服务器：",[26,2302,2304],{"className":430,"code":2303,"language":432,"meta":31,"style":31},"python3 -m http.server 8000\n",[21,2305,2306],{"__ignoreMap":31},[35,2307,2308,2311,2314,2317],{"class":37,"line":38},[35,2309,2310],{"class":439},"python3",[35,2312,2313],{"class":443}," -m",[35,2315,2316],{"class":447}," http.server",[35,2318,2319],{"class":443}," 8000\n",[335,2321,2322],{"start":50},[338,2323,2324,2325,2328],{},"这会在端口",[21,2326,2327],{},"8000","上启动一个Web服务器。",[1193,2330,2331],{},[338,2332,2333],{},"启动服务器后，Termux会显示日志信息，例如：",[26,2335,2337],{"className":430,"code":2336,"language":432,"meta":31,"style":31},"Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...\n",[21,2338,2339],{"__ignoreMap":31},[35,2340,2341,2344,2347,2350,2353,2356,2359],{"class":37,"line":38},[35,2342,2343],{"class":439},"Serving",[35,2345,2346],{"class":447}," HTTP",[35,2348,2349],{"class":447}," on",[35,2351,2352],{"class":443}," 0.0.0.0",[35,2354,2355],{"class":447}," port",[35,2357,2358],{"class":443}," 8000",[35,2360,2361],{"class":1025}," (http://0.0.0.0:8000/) ...\n",[1193,2363,2364],{},[338,2365,2366],{},"这表示服务器已成功启动。",[14,2368,2369],{},[253,2370,2371],{},"在浏览器中访问HTML文件",[335,2373,2374],{},[338,2375,2376,2248,2379,2384,2393],{},[253,2377,2378],{},"在同一设备上访问",[335,2380,2381],{},[338,2382,2383],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[26,2385,2387],{"className":430,"code":2386,"language":432,"meta":31,"style":31},"http://localhost:8000\n",[21,2388,2389],{"__ignoreMap":31},[35,2390,2391],{"class":37,"line":38},[35,2392,2386],{"class":439},[335,2394,2395],{"start":50},[338,2396,2397,2398,2401],{},"如果HTML文件中有",[21,2399,2400],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[10,2403,2405],{"id":2404},"rustdesk","RustDesk",[247,2407,2409],{"id":2408},"rustdesk无人值守远程控制","RustDesk无人值守远程控制",[14,2411,2412],{},"目前rustdesk还没办法进行无人值守在wayland下,所以我们需要把登陆密码,锁屏和休眠待机全部关掉.",[2414,2415,2417],"h5",{"id":2416},"设置-kde6-自动登录","设置 KDE6 自动登录",[335,2419,2420],{},[338,2421,2422],{},"可以先查自己的sddm类型",[26,2424,2426],{"className":430,"code":2425,"language":432,"meta":31,"style":31},"ls /usr/share/xsessions/\n",[21,2427,2428],{"__ignoreMap":31},[35,2429,2430,2433],{"class":37,"line":38},[35,2431,2432],{"class":439},"ls",[35,2434,2435],{"class":447}," /usr/share/xsessions/\n",[26,2437,2439],{"className":430,"code":2438,"language":432,"meta":31,"style":31},"ls /usr/share/wayland-sessions/\n",[21,2440,2441],{"__ignoreMap":31},[35,2442,2443,2445],{"class":37,"line":38},[35,2444,2432],{"class":439},[35,2446,2447],{"class":447}," /usr/share/wayland-sessions/\n",[14,2449,2450],{},"看哪个会输出东西,输出东西的文件夹就是你拥有的sddm,比如xsessions输出内容的话,那就是x11的sddm,如果wayland-sessions输出内容的话你就是wayland的sddm.",[335,2452,2453],{"start":44},[338,2454,2455],{},"编辑 SDDM 配置：",[26,2457,2459],{"className":430,"code":2458,"language":432,"meta":31,"style":31},"sudo nano /etc/sddm.conf\n",[21,2460,2461],{"__ignoreMap":31},[35,2462,2463,2465,2468],{"class":37,"line":38},[35,2464,767],{"class":439},[35,2466,2467],{"class":447}," nano",[35,2469,2470],{"class":447}," /etc/sddm.conf\n",[14,2472,2473,2474,2477],{},"在文件最上面有个",[35,2475,2476],{},"Autologin",",在这个底下加入下面的内容：",[26,2479,2481],{"className":430,"code":2480,"language":432,"meta":31,"style":31},"[Autologin]\nUser=你的用户名\nSession=plasma.desktop   # 或 plasma.desktop（X11），方案一可用 Wayland\n",[21,2482,2483,2488,2498],{"__ignoreMap":31},[35,2484,2485],{"class":37,"line":38},[35,2486,2487],{"class":1025},"[Autologin]\n",[35,2489,2490,2493,2495],{"class":37,"line":44},[35,2491,2492],{"class":1025},"User",[35,2494,1139],{"class":1138},[35,2496,2497],{"class":447},"你的用户名\n",[35,2499,2500,2503,2505,2508],{"class":37,"line":50},[35,2501,2502],{"class":1025},"Session",[35,2504,1139],{"class":1138},[35,2506,2507],{"class":447},"plasma.desktop",[35,2509,2510],{"class":841},"   # 或 plasma.desktop（X11），方案一可用 Wayland\n",[335,2512,2513],{"start":50},[338,2514,2515],{},"保存退出后重启 SDDM：",[26,2517,2519],{"className":430,"code":2518,"language":432,"meta":31,"style":31},"sudo systemctl restart sddm\n",[21,2520,2521],{"__ignoreMap":31},[35,2522,2523,2525,2528,2531],{"class":37,"line":38},[35,2524,767],{"class":439},[35,2526,2527],{"class":447}," systemctl",[35,2529,2530],{"class":447}," restart",[35,2532,2533],{"class":447}," sddm\n",[14,2535,2536],{},"✅ 开机后自动进入桌面，无需输入密码",[2414,2538,2540],{"id":2539},"关闭锁屏在-kde6-系统设置里","关闭锁屏在 KDE6 系统设置里：",[14,2542,2543],{},"打开 系统设置 → 屏幕锁定(Screen Locking)\n关闭自动锁定\n关闭屏幕关闭 / 屏幕保护锁定\n这样 RustDesk 可以开机后直接控制桌面，不会被锁屏阻挡",[2414,2545,2547],{"id":2546},"关闭休眠系统设置-电源管理power-managerment","关闭休眠系统设置 → 电源管理(Power Managerment)",[14,2549,2550],{},"禁用“休眠”或“自动挂起”\n保证电脑开机一直在线，RustDesk 可随时远控\n如果必须休眠，可在 BIOS 设置里禁用休眠，保证开机即联网",[247,2552,2554],{"id":2553},"rustdesk自建服务器","RustDesk自建服务器",[2414,2556,2557],{"id":2557},"在服务器端安装",[2559,2560,2561],"h6",{"id":2561},"命令行方式",[335,2563,2564],{},[338,2565,2566,2567],{},"打开官网:",[2093,2568,2569],{"href":2569,"rel":2570},"https://rustdesk.com/docs/zh-cn/self-host/",[2097],[14,2572,2573],{},[282,2574],{"alt":2575,"src":2576},"alt text","https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768144998052.webp",[335,2578,2579],{"start":44},[338,2580,2581],{},"用ssh访问你需要安装RustDesk的服务器",[26,2583,2585],{"className":430,"code":2584,"language":432,"meta":31,"style":31},"ssh tungchiahui@10.0.0.4\n",[21,2586,2587],{"__ignoreMap":31},[35,2588,2589,2591],{"class":37,"line":38},[35,2590,440],{"class":439},[35,2592,2593],{"class":447}," tungchiahui@10.0.0.4\n",[14,2595,2596],{},[282,2597],{"alt":2575,"src":2598},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768145500558.webp",[335,2600,2601],{"start":50},[338,2602,2603],{},"使用方法二的命令",[14,2605,2606],{},[282,2607],{"alt":2575,"src":2608},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768145605588.webp",[26,2610,2612],{"className":430,"code":2611,"language":432,"meta":31,"style":31},"wget https://raw.githubusercontent.com/techahold/rustdeskinstall/master/install.sh\nchmod +x install.sh\n./install.sh\n",[21,2613,2614,2622,2631],{"__ignoreMap":31},[35,2615,2616,2619],{"class":37,"line":38},[35,2617,2618],{"class":439},"wget",[35,2620,2621],{"class":447}," https://raw.githubusercontent.com/techahold/rustdeskinstall/master/install.sh\n",[35,2623,2624,2626,2628],{"class":37,"line":44},[35,2625,883],{"class":439},[35,2627,886],{"class":447},[35,2629,2630],{"class":447}," install.sh\n",[35,2632,2633],{"class":37,"line":50},[35,2634,2635],{"class":439},"./install.sh\n",[14,2637,2638],{},"./install.sh的设置看下一节",[335,2640,2641],{"start":56},[338,2642,2643],{},"配置与查看KEY",[14,2645,2646,2647,2650,2651,2654],{},"这里如果你是想直接用公网ip则选择",[21,2648,2649],{},"1)IP",",如果你是DDNS等用域名绑定了IP地址,则选择",[21,2652,2653],{},"2)",".",[14,2656,2657],{},[282,2658],{"alt":2575,"src":2659},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768148704646.webp",[14,2661,2662,2663],{},"这个选",[21,2664,2665],{},"2)No",[14,2667,2668],{},[282,2669],{"alt":2575,"src":2670},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768148806049.webp",[14,2672,2673],{},"这个是KEY,要复制下来,等后面软件配置的时候要用.",[14,2675,2676],{},[282,2677],{"alt":2575,"src":2678},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768148866392.webp",[335,2680,2681],{"start":62},[338,2682,2683,2684,2689,2705,2683,2708,2758,2763,2799,2683,2801],{},"配置防火墙",[335,2685,2686],{},[338,2687,2688],{},"如果你是Debian系\n安装防火墙",[26,2690,2692],{"className":430,"code":2691,"language":432,"meta":31,"style":31},"sudo apt install ufw\n",[21,2693,2694],{"__ignoreMap":31},[35,2695,2696,2698,2700,2702],{"class":37,"line":38},[35,2697,767],{"class":439},[35,2699,770],{"class":447},[35,2701,773],{"class":447},[35,2703,2704],{"class":447}," ufw\n",[2706,2707],"br",{},[26,2709,2711],{"className":430,"code":2710,"language":432,"meta":31,"style":31},"sudo ufw allow 22\n\nufw allow 21114:21119/tcp\nufw allow 21116/udp\nsudo ufw enable\n",[21,2712,2713,2726,2730,2740,2749],{"__ignoreMap":31},[35,2714,2715,2717,2720,2723],{"class":37,"line":38},[35,2716,767],{"class":439},[35,2718,2719],{"class":447}," ufw",[35,2721,2722],{"class":447}," allow",[35,2724,2725],{"class":443}," 22\n",[35,2727,2728],{"class":37,"line":44},[35,2729,1004],{"emptyLinePlaceholder":1003},[35,2731,2732,2735,2737],{"class":37,"line":50},[35,2733,2734],{"class":439},"ufw",[35,2736,2722],{"class":447},[35,2738,2739],{"class":447}," 21114:21119/tcp\n",[35,2741,2742,2744,2746],{"class":37,"line":56},[35,2743,2734],{"class":439},[35,2745,2722],{"class":447},[35,2747,2748],{"class":447}," 21116/udp\n",[35,2750,2751,2753,2755],{"class":37,"line":62},[35,2752,767],{"class":439},[35,2754,2719],{"class":447},[35,2756,2757],{"class":447}," enable\n",[335,2759,2760],{"start":44},[338,2761,2762],{},"如果你是RHEL系\n安装防火墙",[26,2764,2766],{"className":430,"code":2765,"language":432,"meta":31,"style":31},"# 如果你是RHEL系\nsudo dnf install firewalld\nsudo systemctl enable --now firewalld\n",[21,2767,2768,2773,2785],{"__ignoreMap":31},[35,2769,2770],{"class":37,"line":38},[35,2771,2772],{"class":841},"# 如果你是RHEL系\n",[35,2774,2775,2777,2780,2782],{"class":37,"line":44},[35,2776,767],{"class":439},[35,2778,2779],{"class":447}," dnf",[35,2781,773],{"class":447},[35,2783,2784],{"class":447}," firewalld\n",[35,2786,2787,2789,2791,2794,2797],{"class":37,"line":50},[35,2788,767],{"class":439},[35,2790,2527],{"class":447},[35,2792,2793],{"class":447}," enable",[35,2795,2796],{"class":443}," --now",[35,2798,2784],{"class":447},[2706,2800],{},[26,2802,2804],{"className":430,"code":2803,"language":432,"meta":31,"style":31},"sudo firewall-cmd --add-port=22/tcp --permanent\nsudo firewall-cmd --reload\n\nsudo firewall-cmd --add-port=21114-21119/tcp --permanent\nsudo firewall-cmd --reload\n\nsudo firewall-cmd --add-port=21116/udp --permanent\nsudo firewall-cmd --reload\n\nsudo systemctl enable --now firewalld\n",[21,2805,2806,2819,2827,2831,2842,2850,2854,2865,2873,2877],{"__ignoreMap":31},[35,2807,2808,2810,2813,2816],{"class":37,"line":38},[35,2809,767],{"class":439},[35,2811,2812],{"class":447}," firewall-cmd",[35,2814,2815],{"class":443}," --add-port=22/tcp",[35,2817,2818],{"class":443}," --permanent\n",[35,2820,2821,2823,2825],{"class":37,"line":44},[35,2822,767],{"class":439},[35,2824,2812],{"class":447},[35,2826,1375],{"class":443},[35,2828,2829],{"class":37,"line":50},[35,2830,1004],{"emptyLinePlaceholder":1003},[35,2832,2833,2835,2837,2840],{"class":37,"line":56},[35,2834,767],{"class":439},[35,2836,2812],{"class":447},[35,2838,2839],{"class":443}," --add-port=21114-21119/tcp",[35,2841,2818],{"class":443},[35,2843,2844,2846,2848],{"class":37,"line":62},[35,2845,767],{"class":439},[35,2847,2812],{"class":447},[35,2849,1375],{"class":443},[35,2851,2852],{"class":37,"line":68},[35,2853,1004],{"emptyLinePlaceholder":1003},[35,2855,2856,2858,2860,2863],{"class":37,"line":74},[35,2857,767],{"class":439},[35,2859,2812],{"class":447},[35,2861,2862],{"class":443}," --add-port=21116/udp",[35,2864,2818],{"class":443},[35,2866,2867,2869,2871],{"class":37,"line":80},[35,2868,767],{"class":439},[35,2870,2812],{"class":447},[35,2872,1375],{"class":443},[35,2874,2875],{"class":37,"line":86},[35,2876,1004],{"emptyLinePlaceholder":1003},[35,2878,2879,2881,2883,2885,2887],{"class":37,"line":92},[35,2880,767],{"class":439},[35,2882,2527],{"class":447},[35,2884,2793],{"class":447},[35,2886,2796],{"class":443},[35,2888,2784],{"class":447},[2559,2890,2892],{"id":2891},"_1panel方式","1Panel方式",[335,2894,2895],{},[338,2896,2897],{},"在面板里搜RustDesk并安装",[14,2899,2900],{},[282,2901],{"alt":2575,"src":2902},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768146100467.webp",[335,2904,2905],{"start":44},[338,2906,2683],{},[14,2908,2909],{},[282,2910],{"alt":2575,"src":2911},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768146828373.webp",[14,2913,2914,2915,2918,2921],{},"添加几个端口\n",[282,2916],{"alt":2575,"src":2917},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768146848849.webp",[282,2919],{"alt":2575,"src":2920},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768146858053.webp",[282,2922],{"alt":2575,"src":2923},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768146876612.webp",[335,2925,2926],{"start":50},[338,2927,2928,2929],{},"查看KEY\n",[282,2930],{"alt":2575,"src":2931},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768146996637.webp",[14,2933,2934],{},"复制KEY",[14,2936,2937],{},[282,2938],{"alt":2575,"src":2939},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768147034654.webp",[2414,2941,2943],{"id":2942},"自建服务器后配置rustdesk软件","自建服务器后配置RustDesk软件",[335,2945,2946],{},[338,2947,2948],{},"PC端",[14,2950,2951],{},[282,2952],{"alt":2575,"src":2953},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768147115389.webp",[14,2955,2956],{},[282,2957],{"alt":2575,"src":2958},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768147204480.webp",[14,2960,2961,2962],{},"出现就绪就是配置成功了\n",[282,2963],{"alt":2575,"src":2964},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768147547538.webp",[335,2966,2967],{"start":44},[338,2968,2969],{},"移动端",[14,2971,2972],{},[282,2973],{"alt":2575,"src":2974},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768149138253.webp",[14,2976,2977],{},[282,2978],{"alt":2575,"src":2979},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768149199158.webp",[2559,2981,2982],{"id":2982},"注意的问题",[14,2984,2985],{},"如果你是家庭的内网服务器,则需要让路由器也放行对应端口",[14,2987,2988,2989],{},"找到openwrt防火墙设置,点击添加\n",[282,2990],{"alt":2575,"src":2991},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768148357743.webp",[14,2993,2994],{},[282,2995],{"alt":2575,"src":2996},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768148378543.webp",[14,2998,2999],{},[282,3000],{"alt":2575,"src":3001},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2024/03/30/1768148398594.webp",[14,3003,3004],{},"这样才可以让你的服务器端口被真正成功放行.",[3006,3007,3008],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":44,"depth":44,"links":3010},[3011,3012,3013,3014,3015,3016,3017],{"id":12,"depth":50,"text":12},{"id":244,"depth":50,"text":245},{"id":743,"depth":50,"text":743},{"id":987,"depth":50,"text":988},{"id":2061,"depth":50,"text":2062},{"id":2080,"depth":50,"text":2080},{"id":2404,"depth":50,"text":2405},"9",9000000,"2024-03-30","2024-03-30-linux-jiao-cheng","/wiki/2024-03-30-linux-jiao-cheng","Linux教程","md",false,null,{},"/wiki/2024-03-30-linux-jiao-cheng/ch9-qi-ta-cao-zuo",{"title":5,"description":31},"wiki/2024-03-30-Linux教程/ch9-其他操作","P3baWo6dnMR7263G1imm5sSkC4ntcIORrtE34On4sng",[3033,3039,3045,3051,3057,3063,3069,3075,3081,3082],{"path":3034,"stem":3035,"title":3036,"date":3020,"chapter":3037,"chapterSort":3038,"docKey":3021,"docRoot":3022,"docTitle":3023,"isWikiDoc":1003,"isWikiIndex":3025},"/wiki/2024-03-30-linux-jiao-cheng/ch1-fa-xing-ban-tui-jian","wiki/2024-03-30-Linux教程/ch1-发行版推荐","发行版推荐","1",1000000,{"path":3040,"stem":3041,"title":3042,"date":3020,"chapter":3043,"chapterSort":3044,"docKey":3021,"docRoot":3022,"docTitle":3023,"isWikiDoc":1003,"isWikiIndex":3025},"/wiki/2024-03-30-linux-jiao-cheng/ch2-linux-zhuang-ji-jiao-cheng","wiki/2024-03-30-Linux教程/ch2-Linux装机教程","Linux装机教程","2",2000000,{"path":3046,"stem":3047,"title":3048,"date":3020,"chapter":3049,"chapterSort":3050,"docKey":3021,"docRoot":3022,"docTitle":3023,"isWikiDoc":1003,"isWikiIndex":3025},"/wiki/2024-03-30-linux-jiao-cheng/ch3-an-zhuang-bi-bei-pei-zhi","wiki/2024-03-30-Linux教程/ch3-安装必备配置","安装必备配置","3",3000000,{"path":3052,"stem":3053,"title":3054,"date":3020,"chapter":3055,"chapterSort":3056,"docKey":3021,"docRoot":3022,"docTitle":3023,"isWikiDoc":1003,"isWikiIndex":3025},"/wiki/2024-03-30-linux-jiao-cheng/ch4-ming-ling-jiao-cheng-chang-qi-ji-lei","wiki/2024-03-30-Linux教程/ch4-命令教程(长期积累)","命令教程(长期积累)","4",4000000,{"path":3058,"stem":3059,"title":3060,"date":3020,"chapter":3061,"chapterSort":3062,"docKey":3021,"docRoot":3022,"docTitle":3023,"isWikiDoc":1003,"isWikiIndex":3025},"/wiki/2024-03-30-linux-jiao-cheng/ch5-ge-zhong-huan-jing-pei-zhi","wiki/2024-03-30-Linux教程/ch5-各种环境配置","各种环境配置","5",5000000,{"path":3064,"stem":3065,"title":3066,"date":3020,"chapter":3067,"chapterSort":3068,"docKey":3021,"docRoot":3022,"docTitle":3023,"isWikiDoc":1003,"isWikiIndex":3025},"/wiki/2024-03-30-linux-jiao-cheng/ch6-qi-ta-ke-xuan-pei-zhi","wiki/2024-03-30-Linux教程/ch6-其他可选配置","其他可选配置","6",6000000,{"path":3070,"stem":3071,"title":3072,"date":3020,"chapter":3073,"chapterSort":3074,"docKey":3021,"docRoot":3022,"docTitle":3023,"isWikiDoc":1003,"isWikiIndex":3025},"/wiki/2024-03-30-linux-jiao-cheng/ch7-qemu-kvm-xu-ni-ji","wiki/2024-03-30-Linux教程/ch7-QEMU-KVM虚拟机","QEMU-KVM虚拟机","7",7000000,{"path":3076,"stem":3077,"title":3078,"date":3020,"chapter":3079,"chapterSort":3080,"docKey":3021,"docRoot":3022,"docTitle":3023,"isWikiDoc":1003,"isWikiIndex":3025},"/wiki/2024-03-30-linux-jiao-cheng/ch8-tuo-zhan-gong-neng","wiki/2024-03-30-Linux教程/ch8-拓展功能","拓展功能","8",8000000,{"path":3028,"stem":3030,"title":5,"date":3020,"chapter":3018,"chapterSort":3019,"docKey":3021,"docRoot":3022,"docTitle":3023,"isWikiDoc":1003,"isWikiIndex":3025},{"path":3022,"stem":3083,"title":3023,"date":3020,"chapter":3026,"chapterSort":3084,"docKey":3021,"docRoot":3022,"docTitle":3023,"isWikiDoc":1003,"isWikiIndex":1003},"wiki/2024-03-30-Linux教程/index",0,1778560328308]