[{"data":1,"prerenderedAt":9426},["ShallowReactive",2],{"content-\u002Fwiki\u002Flinux\u002Flinux-1f4000d":3,"wiki-article-navigation":2046},{"id":4,"title":5,"body":6,"category":2034,"date":2035,"description":2036,"draft":2037,"extension":2038,"featured":2037,"meta":2039,"navigation":551,"path":2040,"seo":2041,"stem":2042,"tags":2043,"type":2044,"__hash__":2045},"content\u002Fwiki\u002Flinux\u002Flinux-1f4000d.md","我的Linux踩坑记",{"type":7,"value":8,"toc":1998},"minimark",[9,16,21,29,32,35,41,45,48,52,139,143,211,217,221,227,231,240,244,247,254,290,294,314,319,436,441,444,447,454,489,492,986,990,1015,1020,1025,1028,1034,1041,1044,1050,1055,1058,1061,1066,1070,1074,1081,1085,1092,1096,1102,1186,1192,1195,1199,1205,1208,1212,1583,1587,1626,1723,1763,1767,1771,1775,1787,1790,1796,1801,1804,1842,1844,1875,1879,1886,1890,1894,1906,1994],[10,11,13],"h2",{"id":12},"kubuntu系列",[14,15,12],"strong",{},[17,18,20],"h3",{"id":19},"_1安装软件","1.安装软件",[22,23,24],"p",{},[25,26],"img",{"alt":27,"src":28},"738","https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fspace\u002Fapi\u002Fbox\u002Fstream\u002Fdownload\u002Fasynccode\u002F?code=NzBhYzgzOTMwOTBlYjViZjM5Mzk2MWNhZTBhNDRhMzRfWHp2Q3RqYU1wUWUzZmo4Skk5Njk4c2Q3WGQ4ZVcyTklfVG9rZW46Q3piUWJGQmJTb3RoYUN4QnpqTmNwRUVqbmJoXzE3ODQ2NDc0NDU6MTc4NDY1MTA0NV9WNA&add_watermark=true&scene_type=CCM",[22,30,31],{},"用 gdebi-gtk",[22,33,34],{},"卸载软件：",[22,36,37],{},[25,38],{"alt":39,"src":40},"612","https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fspace\u002Fapi\u002Fbox\u002Fstream\u002Fdownload\u002Fasynccode\u002F?code=NjY2MjJiMTczNWY0NWUwZTNkMWU1NDU2OWNmODYzYjNfdTBQWmZPZ3VtVDU4WG1XaGZpSGVFN2pDRUpXaG9oRHVfVG9rZW46TXBDbWJVbVBnb2pEVHp4bHRVaWMzQ0JGbjRBXzE3ODQ2NDc0NDU6MTc4NDY1MTA0NV9WNA&add_watermark=true&scene_type=CCM",[17,42,44],{"id":43},"_2代理问题","2.代理问题",[22,46,47],{},"（clash开隧道模式，记得开服务模式，直接解决）",[17,49,51],{"id":50},"_3root权限访问文件夹","3.root权限访问文件夹",[53,54,59],"pre",{"className":55,"code":56,"language":57,"meta":58,"style":58},"language-Bash shiki shiki-themes github-light github-dark","sudo nautilus\n#更改root密码：\nsudo passwd root\n#进入root：\nsu -    \n#输入密码：666    \n#退出root：\nsu user_name\nexit\n","Bash","",[60,61,62,75,82,93,99,112,118,124,132],"code",{"__ignoreMap":58},[63,64,67,71],"span",{"class":65,"line":66},"line",1,[63,68,70],{"class":69},"sScJk","sudo",[63,72,74],{"class":73},"sZZnC"," nautilus\n",[63,76,78],{"class":65,"line":77},2,[63,79,81],{"class":80},"sJ8bj","#更改root密码：\n",[63,83,85,87,90],{"class":65,"line":84},3,[63,86,70],{"class":69},[63,88,89],{"class":73}," passwd",[63,91,92],{"class":73}," root\n",[63,94,96],{"class":65,"line":95},4,[63,97,98],{"class":80},"#进入root：\n",[63,100,102,105,108],{"class":65,"line":101},5,[63,103,104],{"class":69},"su",[63,106,107],{"class":73}," -",[63,109,111],{"class":110},"sVt8B","    \n",[63,113,115],{"class":65,"line":114},6,[63,116,117],{"class":80},"#输入密码：666    \n",[63,119,121],{"class":65,"line":120},7,[63,122,123],{"class":80},"#退出root：\n",[63,125,127,129],{"class":65,"line":126},8,[63,128,104],{"class":69},[63,130,131],{"class":73}," user_name\n",[63,133,135],{"class":65,"line":134},9,[63,136,138],{"class":137},"sj4cs","exit\n",[17,140,142],{"id":141},"_4linux安装vmware","4.linux安装VMware",[53,144,146],{"className":55,"code":145,"language":57,"meta":58,"style":58},"##安装依赖\nsudo apt update \nsudo apt install build-essential linux-headers-generic\n##从官网下载软件包\n##安装VMware\nchmod +x VMware-Workstation-Full-17.5.1-23298084.x86_64.bundle \nsudo .\u002FVMware-Workstation-Full-17.5.1-23298084.x86_64.bundle\n",[60,147,148,153,166,181,186,191,204],{"__ignoreMap":58},[63,149,150],{"class":65,"line":66},[63,151,152],{"class":80},"##安装依赖\n",[63,154,155,157,160,163],{"class":65,"line":77},[63,156,70],{"class":69},[63,158,159],{"class":73}," apt",[63,161,162],{"class":73}," update",[63,164,165],{"class":110}," \n",[63,167,168,170,172,175,178],{"class":65,"line":84},[63,169,70],{"class":69},[63,171,159],{"class":73},[63,173,174],{"class":73}," install",[63,176,177],{"class":73}," build-essential",[63,179,180],{"class":73}," linux-headers-generic\n",[63,182,183],{"class":65,"line":95},[63,184,185],{"class":80},"##从官网下载软件包\n",[63,187,188],{"class":65,"line":101},[63,189,190],{"class":80},"##安装VMware\n",[63,192,193,196,199,202],{"class":65,"line":114},[63,194,195],{"class":69},"chmod",[63,197,198],{"class":73}," +x",[63,200,201],{"class":73}," VMware-Workstation-Full-17.5.1-23298084.x86_64.bundle",[63,203,165],{"class":110},[63,205,206,208],{"class":65,"line":120},[63,207,70],{"class":69},[63,209,210],{"class":73}," .\u002FVMware-Workstation-Full-17.5.1-23298084.x86_64.bundle\n",[22,212,213],{},[25,214],{"alt":215,"src":216},"597","https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fspace\u002Fapi\u002Fbox\u002Fstream\u002Fdownload\u002Fasynccode\u002F?code=NGRhMTA3NDEyYmU4YzgwNmIwYTQ0N2U2OWMyOGMwZTVfVWw4dDlscXUybzIyampNWHdGZzJWbFBzT3lXR1BlUWNfVG9rZW46WWc1NWI5YmZRb202UWp4ejJpTWN3QXpSbklkXzE3ODQ2NDc0NDU6MTc4NDY1MTA0NV9WNA&add_watermark=true&scene_type=CCM",[17,218,220],{"id":219},"_5串口助手","5.串口助手",[22,222,223],{},[25,224],{"alt":225,"src":226},"601","https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fspace\u002Fapi\u002Fbox\u002Fstream\u002Fdownload\u002Fasynccode\u002F?code=YjJmODg0NTFiMzE5MWNhNjEzM2UwMDhhZTU1NDUwNDJfeWlWR2RGeDRPelk4RmJtRnA0SmdCS2llazRNNms1cXFfVG9rZW46VmNGNWI2Z2Jmb3VlS3N4UnZHWmNMZ3AwbjVnXzE3ODQ2NDc0NDU6MTc4NDY1MTA0NV9WNA&add_watermark=true&scene_type=CCM",[17,228,230],{"id":229},"_6kubuntu2404-lts无法安装clash缺少依赖的问题","6.kubuntu24.04 LTS无法安装clash，缺少依赖的问题",[22,232,233,234],{},"使用以下网站解决问题：",[235,236,237],"a",{"href":237,"rel":238},"https:\u002F\u002Fwww.clashverge.dev\u002Ffaq\u002Flinux.html",[239],"nofollow",[17,241,243],{"id":242},"_7安装显卡驱动之后亮度调节问题","7.安装显卡驱动之后亮度调节问题",[22,245,246],{},"1.按照学长的方法更改xorg无效",[22,248,249,250,253],{},"2.安装 ",[60,251,252],{},"xbacklight","：（有效）",[53,255,257],{"className":55,"code":256,"language":57,"meta":58,"style":58},"#安装\nsudo apt install xbacklight\n#设置调节亮度\nxbacklight -set 50\n",[60,258,259,264,275,280],{"__ignoreMap":58},[63,260,261],{"class":65,"line":66},[63,262,263],{"class":80},"#安装\n",[63,265,266,268,270,272],{"class":65,"line":77},[63,267,70],{"class":69},[63,269,159],{"class":73},[63,271,174],{"class":73},[63,273,274],{"class":73}," xbacklight\n",[63,276,277],{"class":65,"line":84},[63,278,279],{"class":80},"#设置调节亮度\n",[63,281,282,284,287],{"class":65,"line":95},[63,283,252],{"class":69},[63,285,286],{"class":137}," -set",[63,288,289],{"class":137}," 50\n",[17,291,293],{"id":292},"_8kubuntu2404-windows硬盘分区挂载失败问题","8.kubuntu24.04 windows硬盘分区挂载失败问题：",[53,295,297],{"className":55,"code":296,"language":57,"meta":58,"style":58},"#查找有哪些分区\nsudo fdisk -l\n",[60,298,299,304],{"__ignoreMap":58},[63,300,301],{"class":65,"line":66},[63,302,303],{"class":80},"#查找有哪些分区\n",[63,305,306,308,311],{"class":65,"line":77},[63,307,70],{"class":69},[63,309,310],{"class":73}," fdisk",[63,312,313],{"class":137}," -l\n",[22,315,316],{},[25,317],{"alt":58,"src":318},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fspace\u002Fapi\u002Fbox\u002Fstream\u002Fdownload\u002Fasynccode\u002F?code=NTQ1YmI1NjllOGQ0NzAyMDVkYmYwNTJiZDA5YjgyODVfanZFTXc3WldpcEdQNThhOGkwcGdNVGtXbjU0Z1hxQ3BfVG9rZW46THp1M2JtZjE5b3lWTHp4SVdWZGNDbHVWbmlkXzE3ODQ2NDc0NDU6MTc4NDY1MTA0NV9WNA&add_watermark=true&scene_type=CCM",[53,320,322],{"className":55,"code":321,"language":57,"meta":58,"style":58},"#使用以下命令来修复文件系统，如果是 ntfs 文件系统，可以使用以下命令\nsudo ntfsfix \u002Fdev\u002Fnvme0n1p4\n#确保你安装了正确的文件系统支持工具。例如，如果文件系统是 ntfs，需要安装 ntfs-3g\nsudo apt install ntfs-3g\n#完成上述步骤后，尝试重新挂载分区\n#分区一般挂载在media\u002Fxiaofangtongxue目录下，先创建挂载文件夹\nsudo mkdir -p \"\u002Fmedia\u002Fxiaofangtongxue\u002FText and Game\"\n#尝试挂载\nsudo mount \u002Fdev\u002Fnvme0n1p4 \"\u002Fmedia\u002Fxiaofangtongxue\u002FText and Game\"\n#检查是否挂载\ndf -h | grep \"\u002Fmedia\u002Fxiaofangtongxue\u002FText and Game\"\n#取消挂载\nsudo umount \u002Fmedia\u002Fxiaofangtongxue\u002FWIN_C\n",[60,323,324,329,339,344,355,360,365,378,383,395,401,419,425],{"__ignoreMap":58},[63,325,326],{"class":65,"line":66},[63,327,328],{"class":80},"#使用以下命令来修复文件系统，如果是 ntfs 文件系统，可以使用以下命令\n",[63,330,331,333,336],{"class":65,"line":77},[63,332,70],{"class":69},[63,334,335],{"class":73}," ntfsfix",[63,337,338],{"class":73}," \u002Fdev\u002Fnvme0n1p4\n",[63,340,341],{"class":65,"line":84},[63,342,343],{"class":80},"#确保你安装了正确的文件系统支持工具。例如，如果文件系统是 ntfs，需要安装 ntfs-3g\n",[63,345,346,348,350,352],{"class":65,"line":95},[63,347,70],{"class":69},[63,349,159],{"class":73},[63,351,174],{"class":73},[63,353,354],{"class":73}," ntfs-3g\n",[63,356,357],{"class":65,"line":101},[63,358,359],{"class":80},"#完成上述步骤后，尝试重新挂载分区\n",[63,361,362],{"class":65,"line":114},[63,363,364],{"class":80},"#分区一般挂载在media\u002Fxiaofangtongxue目录下，先创建挂载文件夹\n",[63,366,367,369,372,375],{"class":65,"line":120},[63,368,70],{"class":69},[63,370,371],{"class":73}," mkdir",[63,373,374],{"class":137}," -p",[63,376,377],{"class":73}," \"\u002Fmedia\u002Fxiaofangtongxue\u002FText and Game\"\n",[63,379,380],{"class":65,"line":126},[63,381,382],{"class":80},"#尝试挂载\n",[63,384,385,387,390,393],{"class":65,"line":134},[63,386,70],{"class":69},[63,388,389],{"class":73}," mount",[63,391,392],{"class":73}," \u002Fdev\u002Fnvme0n1p4",[63,394,377],{"class":73},[63,396,398],{"class":65,"line":397},10,[63,399,400],{"class":80},"#检查是否挂载\n",[63,402,404,407,410,414,417],{"class":65,"line":403},11,[63,405,406],{"class":69},"df",[63,408,409],{"class":137}," -h",[63,411,413],{"class":412},"szBVR"," |",[63,415,416],{"class":69}," grep",[63,418,377],{"class":73},[63,420,422],{"class":65,"line":421},12,[63,423,424],{"class":80},"#取消挂载\n",[63,426,428,430,433],{"class":65,"line":427},13,[63,429,70],{"class":69},[63,431,432],{"class":73}," umount",[63,434,435],{"class":73}," \u002Fmedia\u002Fxiaofangtongxue\u002FWIN_C\n",[22,437,438],{},[25,439],{"alt":58,"src":440},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fspace\u002Fapi\u002Fbox\u002Fstream\u002Fdownload\u002Fasynccode\u002F?code=MGYxYmQ4M2ZkNmY2NDVkNzQ2ZDk3MzZmMzhkMmU3MTVfR1N6eTYybUtxTkxSdDBibmlsb1o5Y01uSHhpWXRwbHBfVG9rZW46SzBoRmJOcWx1b0dUaER4bUVWQWNSYnVobk9QXzE3ODQ2NDc0NDU6MTc4NDY1MTA0NV9WNA&add_watermark=true&scene_type=CCM",[22,442,443],{},"挂载成功！！！",[22,445,446],{},"但是此时每次开机时磁盘需要重新挂载，解决方法如下：",[22,448,449,450,453],{},"要使分区在每次启动时自动挂载，可以通过编辑 ",[60,451,452],{},"\u002Fetc\u002Ffstab"," 文件来实现。请按以下步骤操作：",[53,455,457],{"className":55,"code":456,"language":57,"meta":58,"style":58},"#使用以下命令获取分区的 UUID：\nsudo blkid \u002Fdev\u002Fnvme1n1p4\nsudo vim \u002Fetc\u002Ffstab\n#更改   UUID=xxxx-xxxx  \u002Fmedia\u002Fxiaofangtongxue\u002FText\\040and\\040Game  ntfs  defaults,rw  0  0\n",[60,458,459,464,474,484],{"__ignoreMap":58},[63,460,461],{"class":65,"line":66},[63,462,463],{"class":80},"#使用以下命令获取分区的 UUID：\n",[63,465,466,468,471],{"class":65,"line":77},[63,467,70],{"class":69},[63,469,470],{"class":73}," blkid",[63,472,473],{"class":73}," \u002Fdev\u002Fnvme1n1p4\n",[63,475,476,478,481],{"class":65,"line":84},[63,477,70],{"class":69},[63,479,480],{"class":73}," vim",[63,482,483],{"class":73}," \u002Fetc\u002Ffstab\n",[63,485,486],{"class":65,"line":95},[63,487,488],{"class":80},"#更改   UUID=xxxx-xxxx  \u002Fmedia\u002Fxiaofangtongxue\u002FText\\040and\\040Game  ntfs  defaults,rw  0  0\n",[22,490,491],{},"挂载成功后但是无法写入文件只可以读取，解决方法如下：",[53,493,495],{"className":55,"code":494,"language":57,"meta":58,"style":58},"#取消分区挂载\nsudo umount \u002Fmedia\u002Fxiaofangtongxue\u002FText_and_Game\n#出现错误，发现被占用\numount: \u002Fmedia\u002Fxiaofangtongxue\u002FText_and_Game: target is busy.\nlsof +D \u002Fmedia\u002Fxiaofangtongxue\u002FText_and_Game    #列出正在运行的文件\n\nCOMMAND    PID            USER   FD   TYPE DEVICE SIZE\u002FOFF  NODE NAME \nwpsclouds 3437 xiaofangtongxue  cwd    DIR  259,7     4096 90582 \u002Fmedia\u002Fxiaofangtongxue\u002FText_and_Game\u002FAA_study\n_resource\u002FC++\u002F24二纳作业\u002F第一次考核\n\n#使用keil杀死\nkill -9 3437\nlsof +D \u002Fmedia\u002Fxiaofangtongxue\u002FText_and_Game    #什么都不出现极为正确\n#继续挂载\nsudo mount -t ntfs-3g -o rw \u002Fdev\u002Fnvme0n1p4 \u002Fmedia\u002Fxiaofangtongxue\u002FText_and_Ga\nme\n\n#出现问题\nThe disk contains an unclean file system (0, 0). \nMetadata kept in Windows cache, refused to mount. \nFalling back to read-only mount because the NTFS partition is in an \nunsafe state. Please resume and shutdown Windows fully (no hibernation \nor fast restarting.) \nCould not mount read-write, trying read-only\n\nsudo ntfsfix \u002Fdev\u002Fnvme0n1p4    #进行修复\nNTFS partition \u002Fdev\u002Fnvme0n1p4 was processed successfully.     #完成\n\nsudo mount -t ntfs-3g -o rw \u002Fdev\u002Fnvme0n1p4 \u002Fmedia\u002Fxiaofangtongxue\u002FText_and_Ga\nme                                  #重新挂载，实现读写功能\nmount | grep nvme0n1p4              #检查挂载\n\u002Fdev\u002Fnvme0n1p4 on \u002Fmedia\u002Fxiaofangtongxue\u002FText_and_Game type fuseblk (rw,relatime,user_id=0,group_id=0,allow_ot\nher,blksize=4096)                   #正确使用\n",[60,496,497,502,511,516,533,547,553,584,613,618,622,627,638,649,655,679,685,690,696,729,758,794,828,843,863,868,880,902,907,926,935,951,971],{"__ignoreMap":58},[63,498,499],{"class":65,"line":66},[63,500,501],{"class":80},"#取消分区挂载\n",[63,503,504,506,508],{"class":65,"line":77},[63,505,70],{"class":69},[63,507,432],{"class":73},[63,509,510],{"class":73}," \u002Fmedia\u002Fxiaofangtongxue\u002FText_and_Game\n",[63,512,513],{"class":65,"line":84},[63,514,515],{"class":80},"#出现错误，发现被占用\n",[63,517,518,521,524,527,530],{"class":65,"line":95},[63,519,520],{"class":69},"umount:",[63,522,523],{"class":73}," \u002Fmedia\u002Fxiaofangtongxue\u002FText_and_Game:",[63,525,526],{"class":73}," target",[63,528,529],{"class":73}," is",[63,531,532],{"class":73}," busy.\n",[63,534,535,538,541,544],{"class":65,"line":101},[63,536,537],{"class":69},"lsof",[63,539,540],{"class":73}," +D",[63,542,543],{"class":73}," \u002Fmedia\u002Fxiaofangtongxue\u002FText_and_Game",[63,545,546],{"class":80},"    #列出正在运行的文件\n",[63,548,549],{"class":65,"line":114},[63,550,552],{"emptyLinePlaceholder":551},true,"\n",[63,554,555,558,561,564,567,570,573,576,579,582],{"class":65,"line":120},[63,556,557],{"class":69},"COMMAND",[63,559,560],{"class":73},"    PID",[63,562,563],{"class":73},"            USER",[63,565,566],{"class":73},"   FD",[63,568,569],{"class":73},"   TYPE",[63,571,572],{"class":73}," DEVICE",[63,574,575],{"class":73}," SIZE\u002FOFF",[63,577,578],{"class":73},"  NODE",[63,580,581],{"class":73}," NAME",[63,583,165],{"class":110},[63,585,586,589,592,595,598,601,604,607,610],{"class":65,"line":126},[63,587,588],{"class":69},"wpsclouds",[63,590,591],{"class":137}," 3437",[63,593,594],{"class":73}," xiaofangtongxue",[63,596,597],{"class":73},"  cwd",[63,599,600],{"class":73},"    DIR",[63,602,603],{"class":73},"  259,7",[63,605,606],{"class":137},"     4096",[63,608,609],{"class":137}," 90582",[63,611,612],{"class":73}," \u002Fmedia\u002Fxiaofangtongxue\u002FText_and_Game\u002FAA_study\n",[63,614,615],{"class":65,"line":134},[63,616,617],{"class":69},"_resource\u002FC++\u002F24二纳作业\u002F第一次考核\n",[63,619,620],{"class":65,"line":397},[63,621,552],{"emptyLinePlaceholder":551},[63,623,624],{"class":65,"line":403},[63,625,626],{"class":80},"#使用keil杀死\n",[63,628,629,632,635],{"class":65,"line":421},[63,630,631],{"class":137},"kill",[63,633,634],{"class":137}," -9",[63,636,637],{"class":137}," 3437\n",[63,639,640,642,644,646],{"class":65,"line":427},[63,641,537],{"class":69},[63,643,540],{"class":73},[63,645,543],{"class":73},[63,647,648],{"class":80},"    #什么都不出现极为正确\n",[63,650,652],{"class":65,"line":651},14,[63,653,654],{"class":80},"#继续挂载\n",[63,656,658,660,662,665,668,671,674,676],{"class":65,"line":657},15,[63,659,70],{"class":69},[63,661,389],{"class":73},[63,663,664],{"class":137}," -t",[63,666,667],{"class":73}," ntfs-3g",[63,669,670],{"class":137}," -o",[63,672,673],{"class":73}," rw",[63,675,392],{"class":73},[63,677,678],{"class":73}," \u002Fmedia\u002Fxiaofangtongxue\u002FText_and_Ga\n",[63,680,682],{"class":65,"line":681},16,[63,683,684],{"class":69},"me\n",[63,686,688],{"class":65,"line":687},17,[63,689,552],{"emptyLinePlaceholder":551},[63,691,693],{"class":65,"line":692},18,[63,694,695],{"class":80},"#出现问题\n",[63,697,699,702,705,708,711,714,717,720,723,726],{"class":65,"line":698},19,[63,700,701],{"class":69},"The",[63,703,704],{"class":73}," disk",[63,706,707],{"class":73}," contains",[63,709,710],{"class":73}," an",[63,712,713],{"class":73}," unclean",[63,715,716],{"class":73}," file",[63,718,719],{"class":73}," system",[63,721,722],{"class":110}," (0, ",[63,724,725],{"class":137},"0",[63,727,728],{"class":110},"). \n",[63,730,732,735,738,741,744,747,750,753,756],{"class":65,"line":731},20,[63,733,734],{"class":69},"Metadata",[63,736,737],{"class":73}," kept",[63,739,740],{"class":73}," in",[63,742,743],{"class":73}," Windows",[63,745,746],{"class":73}," cache,",[63,748,749],{"class":73}," refused",[63,751,752],{"class":73}," to",[63,754,755],{"class":73}," mount.",[63,757,165],{"class":110},[63,759,761,764,767,769,772,774,777,780,783,786,788,790,792],{"class":65,"line":760},21,[63,762,763],{"class":69},"Falling",[63,765,766],{"class":73}," back",[63,768,752],{"class":73},[63,770,771],{"class":73}," read-only",[63,773,389],{"class":73},[63,775,776],{"class":73}," because",[63,778,779],{"class":73}," the",[63,781,782],{"class":73}," NTFS",[63,784,785],{"class":73}," partition",[63,787,529],{"class":73},[63,789,740],{"class":73},[63,791,710],{"class":73},[63,793,165],{"class":110},[63,795,797,800,803,806,809,812,815,817,820,823,826],{"class":65,"line":796},22,[63,798,799],{"class":69},"unsafe",[63,801,802],{"class":73}," state.",[63,804,805],{"class":73}," Please",[63,807,808],{"class":73}," resume",[63,810,811],{"class":73}," and",[63,813,814],{"class":73}," shutdown",[63,816,743],{"class":73},[63,818,819],{"class":73}," fully",[63,821,822],{"class":110}," (no ",[63,824,825],{"class":73},"hibernation",[63,827,165],{"class":110},[63,829,831,834,837,840],{"class":65,"line":830},23,[63,832,833],{"class":69},"or",[63,835,836],{"class":73}," fast",[63,838,839],{"class":73}," restarting.",[63,841,842],{"class":110},") \n",[63,844,846,849,852,854,857,860],{"class":65,"line":845},24,[63,847,848],{"class":69},"Could",[63,850,851],{"class":73}," not",[63,853,389],{"class":73},[63,855,856],{"class":73}," read-write,",[63,858,859],{"class":73}," trying",[63,861,862],{"class":73}," read-only\n",[63,864,866],{"class":65,"line":865},25,[63,867,552],{"emptyLinePlaceholder":551},[63,869,871,873,875,877],{"class":65,"line":870},26,[63,872,70],{"class":69},[63,874,335],{"class":73},[63,876,392],{"class":73},[63,878,879],{"class":80},"    #进行修复\n",[63,881,883,886,888,890,893,896,899],{"class":65,"line":882},27,[63,884,885],{"class":69},"NTFS",[63,887,785],{"class":73},[63,889,392],{"class":73},[63,891,892],{"class":73}," was",[63,894,895],{"class":73}," processed",[63,897,898],{"class":73}," successfully.",[63,900,901],{"class":80},"     #完成\n",[63,903,905],{"class":65,"line":904},28,[63,906,552],{"emptyLinePlaceholder":551},[63,908,910,912,914,916,918,920,922,924],{"class":65,"line":909},29,[63,911,70],{"class":69},[63,913,389],{"class":73},[63,915,664],{"class":137},[63,917,667],{"class":73},[63,919,670],{"class":137},[63,921,673],{"class":73},[63,923,392],{"class":73},[63,925,678],{"class":73},[63,927,929,932],{"class":65,"line":928},30,[63,930,931],{"class":69},"me",[63,933,934],{"class":80},"                                  #重新挂载，实现读写功能\n",[63,936,938,941,943,945,948],{"class":65,"line":937},31,[63,939,940],{"class":69},"mount",[63,942,413],{"class":412},[63,944,416],{"class":69},[63,946,947],{"class":73}," nvme0n1p4",[63,949,950],{"class":80},"              #检查挂载\n",[63,952,954,957,960,962,965,968],{"class":65,"line":953},32,[63,955,956],{"class":69},"\u002Fdev\u002Fnvme0n1p4",[63,958,959],{"class":73}," on",[63,961,543],{"class":73},[63,963,964],{"class":73}," type",[63,966,967],{"class":73}," fuseblk",[63,969,970],{"class":110}," (rw,relatime,user_id=0,group_id=0,allow_ot\n",[63,972,974,977,980,983],{"class":65,"line":973},33,[63,975,976],{"class":69},"her,blksize",[63,978,979],{"class":73},"=4096",[63,981,982],{"class":110},")                   ",[63,984,985],{"class":80},"#正确使用\n",[17,987,989],{"id":988},"_9qq音乐在kubuntu2404闪退问题","9.QQ音乐在kubuntu24.04闪退问题",[53,991,993],{"className":55,"code":992,"language":57,"meta":58,"style":58},"sudo vi \u002Fusr\u002Fshare\u002Fapplications\u002Fqqmusic.desktop\n#找到Exec=\u002Fopt\u002Fqqmusic\u002Fqqmusic %U\n#在后面加上--no-sandbox\n",[60,994,995,1005,1010],{"__ignoreMap":58},[63,996,997,999,1002],{"class":65,"line":66},[63,998,70],{"class":69},[63,1000,1001],{"class":73}," vi",[63,1003,1004],{"class":73}," \u002Fusr\u002Fshare\u002Fapplications\u002Fqqmusic.desktop\n",[63,1006,1007],{"class":65,"line":77},[63,1008,1009],{"class":80},"#找到Exec=\u002Fopt\u002Fqqmusic\u002Fqqmusic %U\n",[63,1011,1012],{"class":65,"line":84},[63,1013,1014],{"class":80},"#在后面加上--no-sandbox\n",[22,1016,1017],{},[25,1018],{"alt":58,"src":1019},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fspace\u002Fapi\u002Fbox\u002Fstream\u002Fdownload\u002Fasynccode\u002F?code=NmI4OTVmZDIyMjJjOTE4NTE1OGE3ZDViNjc1MDRkNGVfb3JWM01wRkRKVm1rZTFZT3dKRmhuRmZmbHRoTDBiUjlfVG9rZW46Q0xZUmJxQlpXb0tvNW94bXJRSWNRcFkybmNnXzE3ODQ2NDc0NDU6MTc4NDY1MTA0NV9WNA&add_watermark=true&scene_type=CCM",[22,1021,1022],{},[25,1023],{"alt":58,"src":1024},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fspace\u002Fapi\u002Fbox\u002Fstream\u002Fdownload\u002Fasynccode\u002F?code=NGI4NjVjZTZhN2I4NGIzY2RlMjFiYTQ2NTM1ZGFlYTJfTEl6UllIb3VJYkhJZ1JzcmUyQlVNZ3drQ3lzMjNQNHBfVG9rZW46R29WbmJwc1Nib0ZTQXV4c0xsQmNKRGp3bjZmXzE3ODQ2NDc0NDU6MTc4NDY1MTA0NV9WNA&add_watermark=true&scene_type=CCM",[22,1026,1027],{},"成功解决！",[17,1029,1031],{"id":1030},"_10-权限不足导致无法访问",[14,1032,1033],{},"10. 权限不足导致无法访问",[1035,1036,1038],"h4",{"id":1037},"原因",[14,1039,1040],{},"原因：",[22,1042,1043],{},"挂载点或磁盘上的文件权限不足，导致普通用户无法进入。",[1035,1045,1047],{"id":1046},"解决方法修改挂载点权限",[14,1048,1049],{},"解决方法：修改挂载点权限",[22,1051,1052],{},[14,1053,1054],{},"方法一：将挂载点所有权改为当前用户",[22,1056,1057],{},"bash",[22,1059,1060],{},"复制代码",[22,1062,1063],{},[60,1064,1065],{},"sudo chown -R $USER:$USER \u002Fmnt\u002Fyour_mount_point",[10,1067,1069],{"id":1068},"fedora-系列","Fedora 系列",[17,1071,1073],{"id":1072},"_1fedora-update","1.Fedora Update",[22,1075,1076],{},[235,1077,1080],{"href":1078,"rel":1079},"https:\u002F\u002Fwww.sysgeek.cn\u002Fupgrade-fedora-to-latest-release\u002F",[239],"Fedora 升级系统版本",[17,1082,1084],{"id":1083},"_2-linux-下的bilibili客户端","2. linux 下的bilibili客户端",[22,1086,1087],{},[235,1088,1091],{"href":1089,"rel":1090},"https:\u002F\u002Fgithub.com\u002Fmsojocs\u002Fbilibili-linux",[239],"bilibili",[17,1093,1095],{"id":1094},"_3-很多软件安装之后不显示中文字体多半是没有安装","3. 很多软件安装之后不显示中文字体,多半是没有安装",[22,1097,1098],{},[25,1099],{"alt":1100,"src":1101},"378","https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fspace\u002Fapi\u002Fbox\u002Fstream\u002Fdownload\u002Fasynccode\u002F?code=OWE4NDUyNjVlZmRkOGZlNTlmNTE5MDk3NmMyOGQ4ZGVfMWRwUmI2dFM2SXRoM2IzWmFNZVRSN1Y3bDhtYUxUQzFfVG9rZW46V2MyRmI1N0Vwb2FIZm94akNxRGNJQVczbmxyXzE3ODQ2NDc0NDU6MTc4NDY1MTA0NV9WNA&add_watermark=true&scene_type=CCM",[53,1103,1105],{"className":55,"code":1104,"language":57,"meta":58,"style":58},"#安装中文字体\nsudo dnf install google-noto-sans-cjk-ttc-fonts google-noto-serif-cjk-ttc-fonts \\\nadobe-source-han-sans-cn-fonts adobe-source-han-serif-cn-fonts \\\nwqy-zenhei-fonts wqy-microhei-fonts\n#刷新字体\nfc-cache -fv\n#确认系统字体能找到中文覆盖\nfc-list :lang=zh | wc -l\n#返回的数字大于0说明成功\n",[60,1106,1107,1112,1130,1140,1148,1153,1161,1166,1181],{"__ignoreMap":58},[63,1108,1109],{"class":65,"line":66},[63,1110,1111],{"class":80},"#安装中文字体\n",[63,1113,1114,1116,1119,1121,1124,1127],{"class":65,"line":77},[63,1115,70],{"class":69},[63,1117,1118],{"class":73}," dnf",[63,1120,174],{"class":73},[63,1122,1123],{"class":73}," google-noto-sans-cjk-ttc-fonts",[63,1125,1126],{"class":73}," google-noto-serif-cjk-ttc-fonts",[63,1128,1129],{"class":137}," \\\n",[63,1131,1132,1135,1138],{"class":65,"line":84},[63,1133,1134],{"class":110},"adobe-source-han-sans-cn-fonts ",[63,1136,1137],{"class":73},"adobe-source-han-serif-cn-fonts",[63,1139,1129],{"class":137},[63,1141,1142,1145],{"class":65,"line":95},[63,1143,1144],{"class":110},"wqy-zenhei-fonts ",[63,1146,1147],{"class":73},"wqy-microhei-fonts\n",[63,1149,1150],{"class":65,"line":101},[63,1151,1152],{"class":80},"#刷新字体\n",[63,1154,1155,1158],{"class":65,"line":114},[63,1156,1157],{"class":69},"fc-cache",[63,1159,1160],{"class":137}," -fv\n",[63,1162,1163],{"class":65,"line":120},[63,1164,1165],{"class":80},"#确认系统字体能找到中文覆盖\n",[63,1167,1168,1171,1174,1176,1179],{"class":65,"line":126},[63,1169,1170],{"class":69},"fc-list",[63,1172,1173],{"class":73}," :lang=zh",[63,1175,413],{"class":412},[63,1177,1178],{"class":69}," wc",[63,1180,313],{"class":137},[63,1182,1183],{"class":65,"line":134},[63,1184,1185],{"class":80},"#返回的数字大于0说明成功\n",[22,1187,1188],{},[25,1189],{"alt":1190,"src":1191},"422","https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fspace\u002Fapi\u002Fbox\u002Fstream\u002Fdownload\u002Fasynccode\u002F?code=YTk4ZmNmOTdiOWQ3NWJlYmI1NGNlMmUxMTYyMmEyODlfT0lFdVZsbTk2Q2owT01STnVUY0xTTXhVSDc5eWtTeHhfVG9rZW46R1kxNmJnYnp1b2V1T0R4ZkFxTmNzYUhBbmpkXzE3ODQ2NDc0NDU6MTc4NDY1MTA0NV9WNA&add_watermark=true&scene_type=CCM",[22,1193,1194],{},"成功解决!",[17,1196,1198],{"id":1197},"_4-vscode配置-symbols-nerd-font-mono字体","4.  vscode配置 Symbols Nerd Font Mono字体",[22,1200,1201],{},[25,1202],{"alt":1203,"src":1204},"769","https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fspace\u002Fapi\u002Fbox\u002Fstream\u002Fdownload\u002Fasynccode\u002F?code=MDEzMDkzNDk0N2RlYzIwMmIwYTM2MDFiNzk2MmM3MzNfajNxU3dFSkZkZnhkZm8wTjNVdkRiN3p6VFo5U0Y1bE1fVG9rZW46T3lHNWJVVDk5bzg2T1J4RWxzYmNONXR2bjBmXzE3ODQ2NDc0NDU6MTc4NDY1MTA0NV9WNA&add_watermark=true&scene_type=CCM",[10,1206,1207],{"id":1207},"适用于所有linux系列",[17,1209,1211],{"id":1210},"_1-更改文件所有者","1. 更改文件所有者",[53,1213,1215],{"className":55,"code":1214,"language":57,"meta":58,"style":58},"ls -l  #查看文件所有者\ntotal 36 \ndrwxr-xr-x. 4 xiaofang xiaofang 4096 Oct 24 16:26 base_driver_pkg \ndrwxr-xr-x. 3 xiaofang xiaofang 4096 Oct 24 16:26 base_interfaces \ndrwxr-xr-x. 4 xiaofang xiaofang 4096 Oct 24 16:26 localization_pkg \ndrwxr-xr-x. 3 xiaofang xiaofang 4096 Oct 24 16:26 my_map_server \ndrwxr-xr-x. 4 xiaofang xiaofang 4096 Oct 24 16:26 my_slam_toolbox \ndrwxrwxrwx. 4 root     root     4096 Oct 25 19:26 navigation2_config \n\nsudo chown $USER:$USER navigation2_config\u002F  #更改为当前用户所有\nsudo chown -R $USER:$USER folder_name #递归修改\nls -l \ntotal 36 \ndrwxr-xr-x. 4 xiaofang xiaofang 4096 Oct 24 16:26 base_driver_pkg \ndrwxr-xr-x. 3 xiaofang xiaofang 4096 Oct 24 16:26 base_interfaces \ndrwxr-xr-x. 4 xiaofang xiaofang 4096 Oct 24 16:26 localization_pkg \ndrwxr-xr-x. 3 xiaofang xiaofang 4096 Oct 24 16:26 my_map_server \ndrwxr-xr-x. 4 xiaofang xiaofang 4096 Oct 24 16:26 my_slam_toolbox \ndrwxrwxrwx. 4 xiaofang xiaofang 4096 Oct 25 19:26 navigation2_config\n \n",[60,1216,1217,1228,1238,1268,1292,1315,1338,1361,1389,1393,1415,1436,1444,1452,1474,1496,1518,1540,1562],{"__ignoreMap":58},[63,1218,1219,1222,1225],{"class":65,"line":66},[63,1220,1221],{"class":69},"ls",[63,1223,1224],{"class":137}," -l",[63,1226,1227],{"class":80},"  #查看文件所有者\n",[63,1229,1230,1233,1236],{"class":65,"line":77},[63,1231,1232],{"class":69},"total",[63,1234,1235],{"class":137}," 36",[63,1237,165],{"class":110},[63,1239,1240,1243,1246,1249,1251,1254,1257,1260,1263,1266],{"class":65,"line":84},[63,1241,1242],{"class":69},"drwxr-xr-x.",[63,1244,1245],{"class":137}," 4",[63,1247,1248],{"class":73}," xiaofang",[63,1250,1248],{"class":73},[63,1252,1253],{"class":137}," 4096",[63,1255,1256],{"class":73}," Oct",[63,1258,1259],{"class":137}," 24",[63,1261,1262],{"class":73}," 16:26",[63,1264,1265],{"class":73}," base_driver_pkg",[63,1267,165],{"class":110},[63,1269,1270,1272,1275,1277,1279,1281,1283,1285,1287,1290],{"class":65,"line":95},[63,1271,1242],{"class":69},[63,1273,1274],{"class":137}," 3",[63,1276,1248],{"class":73},[63,1278,1248],{"class":73},[63,1280,1253],{"class":137},[63,1282,1256],{"class":73},[63,1284,1259],{"class":137},[63,1286,1262],{"class":73},[63,1288,1289],{"class":73}," base_interfaces",[63,1291,165],{"class":110},[63,1293,1294,1296,1298,1300,1302,1304,1306,1308,1310,1313],{"class":65,"line":101},[63,1295,1242],{"class":69},[63,1297,1245],{"class":137},[63,1299,1248],{"class":73},[63,1301,1248],{"class":73},[63,1303,1253],{"class":137},[63,1305,1256],{"class":73},[63,1307,1259],{"class":137},[63,1309,1262],{"class":73},[63,1311,1312],{"class":73}," localization_pkg",[63,1314,165],{"class":110},[63,1316,1317,1319,1321,1323,1325,1327,1329,1331,1333,1336],{"class":65,"line":114},[63,1318,1242],{"class":69},[63,1320,1274],{"class":137},[63,1322,1248],{"class":73},[63,1324,1248],{"class":73},[63,1326,1253],{"class":137},[63,1328,1256],{"class":73},[63,1330,1259],{"class":137},[63,1332,1262],{"class":73},[63,1334,1335],{"class":73}," my_map_server",[63,1337,165],{"class":110},[63,1339,1340,1342,1344,1346,1348,1350,1352,1354,1356,1359],{"class":65,"line":120},[63,1341,1242],{"class":69},[63,1343,1245],{"class":137},[63,1345,1248],{"class":73},[63,1347,1248],{"class":73},[63,1349,1253],{"class":137},[63,1351,1256],{"class":73},[63,1353,1259],{"class":137},[63,1355,1262],{"class":73},[63,1357,1358],{"class":73}," my_slam_toolbox",[63,1360,165],{"class":110},[63,1362,1363,1366,1368,1371,1374,1376,1378,1381,1384,1387],{"class":65,"line":126},[63,1364,1365],{"class":69},"drwxrwxrwx.",[63,1367,1245],{"class":137},[63,1369,1370],{"class":73}," root",[63,1372,1373],{"class":73},"     root",[63,1375,606],{"class":137},[63,1377,1256],{"class":73},[63,1379,1380],{"class":137}," 25",[63,1382,1383],{"class":73}," 19:26",[63,1385,1386],{"class":73}," navigation2_config",[63,1388,165],{"class":110},[63,1390,1391],{"class":65,"line":134},[63,1392,552],{"emptyLinePlaceholder":551},[63,1394,1395,1397,1400,1403,1406,1409,1412],{"class":65,"line":397},[63,1396,70],{"class":69},[63,1398,1399],{"class":73}," chown",[63,1401,1402],{"class":110}," $USER",[63,1404,1405],{"class":73},":",[63,1407,1408],{"class":110},"$USER ",[63,1410,1411],{"class":73},"navigation2_config\u002F",[63,1413,1414],{"class":80},"  #更改为当前用户所有\n",[63,1416,1417,1419,1421,1424,1426,1428,1430,1433],{"class":65,"line":403},[63,1418,70],{"class":69},[63,1420,1399],{"class":73},[63,1422,1423],{"class":137}," -R",[63,1425,1402],{"class":110},[63,1427,1405],{"class":73},[63,1429,1408],{"class":110},[63,1431,1432],{"class":73},"folder_name",[63,1434,1435],{"class":80}," #递归修改\n",[63,1437,1438,1440,1442],{"class":65,"line":421},[63,1439,1221],{"class":69},[63,1441,1224],{"class":137},[63,1443,165],{"class":110},[63,1445,1446,1448,1450],{"class":65,"line":427},[63,1447,1232],{"class":69},[63,1449,1235],{"class":137},[63,1451,165],{"class":110},[63,1453,1454,1456,1458,1460,1462,1464,1466,1468,1470,1472],{"class":65,"line":651},[63,1455,1242],{"class":69},[63,1457,1245],{"class":137},[63,1459,1248],{"class":73},[63,1461,1248],{"class":73},[63,1463,1253],{"class":137},[63,1465,1256],{"class":73},[63,1467,1259],{"class":137},[63,1469,1262],{"class":73},[63,1471,1265],{"class":73},[63,1473,165],{"class":110},[63,1475,1476,1478,1480,1482,1484,1486,1488,1490,1492,1494],{"class":65,"line":657},[63,1477,1242],{"class":69},[63,1479,1274],{"class":137},[63,1481,1248],{"class":73},[63,1483,1248],{"class":73},[63,1485,1253],{"class":137},[63,1487,1256],{"class":73},[63,1489,1259],{"class":137},[63,1491,1262],{"class":73},[63,1493,1289],{"class":73},[63,1495,165],{"class":110},[63,1497,1498,1500,1502,1504,1506,1508,1510,1512,1514,1516],{"class":65,"line":681},[63,1499,1242],{"class":69},[63,1501,1245],{"class":137},[63,1503,1248],{"class":73},[63,1505,1248],{"class":73},[63,1507,1253],{"class":137},[63,1509,1256],{"class":73},[63,1511,1259],{"class":137},[63,1513,1262],{"class":73},[63,1515,1312],{"class":73},[63,1517,165],{"class":110},[63,1519,1520,1522,1524,1526,1528,1530,1532,1534,1536,1538],{"class":65,"line":687},[63,1521,1242],{"class":69},[63,1523,1274],{"class":137},[63,1525,1248],{"class":73},[63,1527,1248],{"class":73},[63,1529,1253],{"class":137},[63,1531,1256],{"class":73},[63,1533,1259],{"class":137},[63,1535,1262],{"class":73},[63,1537,1335],{"class":73},[63,1539,165],{"class":110},[63,1541,1542,1544,1546,1548,1550,1552,1554,1556,1558,1560],{"class":65,"line":692},[63,1543,1242],{"class":69},[63,1545,1245],{"class":137},[63,1547,1248],{"class":73},[63,1549,1248],{"class":73},[63,1551,1253],{"class":137},[63,1553,1256],{"class":73},[63,1555,1259],{"class":137},[63,1557,1262],{"class":73},[63,1559,1358],{"class":73},[63,1561,165],{"class":110},[63,1563,1564,1566,1568,1570,1572,1574,1576,1578,1580],{"class":65,"line":698},[63,1565,1365],{"class":69},[63,1567,1245],{"class":137},[63,1569,1248],{"class":73},[63,1571,1248],{"class":73},[63,1573,1253],{"class":137},[63,1575,1256],{"class":73},[63,1577,1380],{"class":137},[63,1579,1383],{"class":73},[63,1581,1582],{"class":73}," navigation2_config\n",[17,1584,1586],{"id":1585},"_2-创建软件图标","2. 创建软件图标",[53,1588,1590],{"className":55,"code":1589,"language":57,"meta":58,"style":58},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[60,1591,1592,1600,1608,1615],{"__ignoreMap":58},[63,1593,1594,1597],{"class":65,"line":66},[63,1595,1596],{"class":137},"cd",[63,1598,1599],{"class":73}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[63,1601,1602,1605],{"class":65,"line":77},[63,1603,1604],{"class":69},"touch",[63,1606,1607],{"class":73}," .\u002Fqqmusic.desktop\n",[63,1609,1610,1613],{"class":65,"line":84},[63,1611,1612],{"class":69},"vim",[63,1614,1607],{"class":73},[63,1616,1617,1619,1622,1624],{"class":65,"line":95},[63,1618,70],{"class":69},[63,1620,1621],{"class":73}," chmod",[63,1623,198],{"class":73},[63,1625,1607],{"class":73},[53,1627,1629],{"className":55,"code":1628,"language":57,"meta":58,"style":58},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[60,1630,1631,1636,1647,1657,1667,1677,1701],{"__ignoreMap":58},[63,1632,1633],{"class":65,"line":66},[63,1634,1635],{"class":110},"[Desktop Entry]\n",[63,1637,1638,1641,1644],{"class":65,"line":77},[63,1639,1640],{"class":110},"Name",[63,1642,1643],{"class":412},"=",[63,1645,1646],{"class":73},"QQ音乐\n",[63,1648,1649,1652,1654],{"class":65,"line":84},[63,1650,1651],{"class":110},"Exec",[63,1653,1643],{"class":412},[63,1655,1656],{"class":73},"\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[63,1658,1659,1662,1664],{"class":65,"line":95},[63,1660,1661],{"class":110},"Icon",[63,1663,1643],{"class":412},[63,1665,1666],{"class":73},"\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[63,1668,1669,1672,1674],{"class":65,"line":101},[63,1670,1671],{"class":110},"Type",[63,1673,1643],{"class":412},[63,1675,1676],{"class":73},"Application\n",[63,1678,1679,1682,1684,1687,1690,1693,1695,1698],{"class":65,"line":114},[63,1680,1681],{"class":110},"Categories",[63,1683,1643],{"class":412},[63,1685,1686],{"class":73},"Audio",[63,1688,1689],{"class":110},";",[63,1691,1692],{"class":69},"Music",[63,1694,1689],{"class":110},[63,1696,1697],{"class":69},"Player",[63,1699,1700],{"class":110},";\n",[63,1702,1703,1706,1708,1711,1714,1717,1720],{"class":65,"line":120},[63,1704,1705],{"class":110},"Comment",[63,1707,1643],{"class":412},[63,1709,1710],{"class":73},"QQ",[63,1712,1713],{"class":69}," Music",[63,1715,1716],{"class":73}," Client",[63,1718,1719],{"class":73}," for",[63,1721,1722],{"class":73}," Linux\n",[53,1724,1726],{"className":55,"code":1725,"language":57,"meta":58,"style":58},"Utility（实用工具）\nDevelopment（开发工具）\nGraphics（图形设计）\nAudioVideo（影音）\nEducation（教育）\nNetwork（网络）\nOffice（办公）\n",[60,1727,1728,1733,1738,1743,1748,1753,1758],{"__ignoreMap":58},[63,1729,1730],{"class":65,"line":66},[63,1731,1732],{"class":69},"Utility（实用工具）\n",[63,1734,1735],{"class":65,"line":77},[63,1736,1737],{"class":69},"Development（开发工具）\n",[63,1739,1740],{"class":65,"line":84},[63,1741,1742],{"class":69},"Graphics（图形设计）\n",[63,1744,1745],{"class":65,"line":95},[63,1746,1747],{"class":69},"AudioVideo（影音）\n",[63,1749,1750],{"class":65,"line":101},[63,1751,1752],{"class":69},"Education（教育）\n",[63,1754,1755],{"class":65,"line":114},[63,1756,1757],{"class":69},"Network（网络）\n",[63,1759,1760],{"class":65,"line":120},[63,1761,1762],{"class":69},"Office（办公）\n",[10,1764,1766],{"id":1765},"linux美化与体验优化","Linux美化与体验优化",[17,1768,1770],{"id":1769},"_1-终端美化","1. 终端美化",[1035,1772,1774],{"id":1773},"_11美化提示符-使用starship","1.1美化提示符 （使用starship）",[1776,1777,1778],"ol",{},[1779,1780,1781,1782],"li",{},"下载好字体还有配置文件\n",[235,1783,1786],{"href":1784,"rel":1785},"https:\u002F\u002Fstarship.rs\u002F",[239],"starship",[22,1788,1789],{},"按照官方配置即可",[22,1791,1792],{},[25,1793],{"alt":1794,"src":1795},"569","https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fspace\u002Fapi\u002Fbox\u002Fstream\u002Fdownload\u002Fasynccode\u002F?code=NmVkMGI5ZGJhNmIzZTc1NjU1OGEzZDQyYWZlNTczOTRfd01rM0tVQWtORUNoSmIydHV1Um5yN1pFeUNNeHVFeWFfVG9rZW46T3plUWIyS3RHb1JFdUV4VWYzb2NwVnJibmpmXzE3ODQ2NDc0NDU6MTc4NDY1MTA0NV9WNA&add_watermark=true&scene_type=CCM",[1776,1797,1798],{"start":77},[1779,1799,1800],{},"编辑当前shell的配置文件\n例如:",[22,1802,1803],{},"fish",[53,1805,1809],{"className":1806,"code":1807,"language":1808,"meta":58,"style":58},"language-Shell shiki shiki-themes github-light github-dark","vim ~\u002F.config\u002Ffish\u002Fconfig.fish\n\n#写入\nstarship init fish | source\n","Shell",[60,1810,1811,1818,1822,1827],{"__ignoreMap":58},[63,1812,1813,1815],{"class":65,"line":66},[63,1814,1612],{"class":69},[63,1816,1817],{"class":73}," ~\u002F.config\u002Ffish\u002Fconfig.fish\n",[63,1819,1820],{"class":65,"line":77},[63,1821,552],{"emptyLinePlaceholder":551},[63,1823,1824],{"class":65,"line":84},[63,1825,1826],{"class":80},"#写入\n",[63,1828,1829,1831,1834,1837,1839],{"class":65,"line":95},[63,1830,1786],{"class":69},[63,1832,1833],{"class":73}," init",[63,1835,1836],{"class":73}," fish",[63,1838,413],{"class":412},[63,1840,1841],{"class":137}," source\n",[22,1843,1057],{},[53,1845,1847],{"className":55,"code":1846,"language":57,"meta":58,"style":58},"vim ~\u002F.bashrc \n\neval \"$(starship init bash)\"\n",[60,1848,1849,1858,1862],{"__ignoreMap":58},[63,1850,1851,1853,1856],{"class":65,"line":66},[63,1852,1612],{"class":69},[63,1854,1855],{"class":73}," ~\u002F.bashrc",[63,1857,165],{"class":110},[63,1859,1860],{"class":65,"line":77},[63,1861,552],{"emptyLinePlaceholder":551},[63,1863,1864,1867,1870,1872],{"class":65,"line":84},[63,1865,1866],{"class":137},"eval",[63,1868,1869],{"class":73}," \"$(",[63,1871,1786],{"class":69},[63,1873,1874],{"class":73}," init bash)\"\n",[17,1876,1878],{"id":1877},"_2终端文件显示","2.终端文件显示",[22,1880,1881],{},[235,1882,1885],{"href":1883,"rel":1884},"https:\u002F\u002Fyazi-rs.github.io\u002Fdocs\u002Fquick-start",[239],"使用yazi",[17,1887,1889],{"id":1888},"_3wayland-窗口管理器美化-niri-dms","3.Wayland 窗口管理器美化 NiRi DMS",[1035,1891,1893],{"id":1892},"obs在niri下无法录制屏幕的问题","OBS在niri下无法录制屏幕的问题",[1895,1896,1897,1903],"ul",{},[1779,1898,1899,1900],{},"原因：原来在KDE下面，转到niri之后缺少驱动 ",[60,1901,1902],{},"xdg-desktop-portal-gnome",[1779,1904,1905],{},"解决方法:重新安装这个驱动",[53,1907,1910],{"className":1908,"code":1909,"language":1057,"meta":58,"style":58},"language-bash shiki shiki-themes github-light github-dark","#install service\nsudo dnf install xdg-desktop-portal-gnome\n#reboot service\nsystemctl --user restart xdg-desktop-portal\nsystemctl --user restart xdg-desktop-portal-gnome\n#查看状态  显示active即可\nsystemctl --user status xdg-desktop-portal-gnome\n#彻底关闭OBS\nflatpak kill com.obsproject.Studio\n#重新打开就有啦\n",[60,1911,1912,1917,1928,1933,1947,1957,1962,1973,1978,1989],{"__ignoreMap":58},[63,1913,1914],{"class":65,"line":66},[63,1915,1916],{"class":80},"#install service\n",[63,1918,1919,1921,1923,1925],{"class":65,"line":77},[63,1920,70],{"class":69},[63,1922,1118],{"class":73},[63,1924,174],{"class":73},[63,1926,1927],{"class":73}," xdg-desktop-portal-gnome\n",[63,1929,1930],{"class":65,"line":84},[63,1931,1932],{"class":80},"#reboot service\n",[63,1934,1935,1938,1941,1944],{"class":65,"line":95},[63,1936,1937],{"class":69},"systemctl",[63,1939,1940],{"class":137}," --user",[63,1942,1943],{"class":73}," restart",[63,1945,1946],{"class":73}," xdg-desktop-portal\n",[63,1948,1949,1951,1953,1955],{"class":65,"line":101},[63,1950,1937],{"class":69},[63,1952,1940],{"class":137},[63,1954,1943],{"class":73},[63,1956,1927],{"class":73},[63,1958,1959],{"class":65,"line":114},[63,1960,1961],{"class":80},"#查看状态  显示active即可\n",[63,1963,1964,1966,1968,1971],{"class":65,"line":120},[63,1965,1937],{"class":69},[63,1967,1940],{"class":137},[63,1969,1970],{"class":73}," status",[63,1972,1927],{"class":73},[63,1974,1975],{"class":65,"line":126},[63,1976,1977],{"class":80},"#彻底关闭OBS\n",[63,1979,1980,1983,1986],{"class":65,"line":134},[63,1981,1982],{"class":69},"flatpak",[63,1984,1985],{"class":73}," kill",[63,1987,1988],{"class":73}," com.obsproject.Studio\n",[63,1990,1991],{"class":65,"line":397},[63,1992,1993],{"class":80},"#重新打开就有啦\n",[1995,1996,1997],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}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 .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":58,"searchDepth":95,"depth":95,"links":1999},[2000,2015,2021,2025],{"id":12,"depth":77,"text":12,"children":2001},[2002,2003,2004,2005,2006,2007,2008,2009,2010,2011],{"id":19,"depth":84,"text":20},{"id":43,"depth":84,"text":44},{"id":50,"depth":84,"text":51},{"id":141,"depth":84,"text":142},{"id":219,"depth":84,"text":220},{"id":229,"depth":84,"text":230},{"id":242,"depth":84,"text":243},{"id":292,"depth":84,"text":293},{"id":988,"depth":84,"text":989},{"id":1030,"depth":84,"text":1033,"children":2012},[2013,2014],{"id":1037,"depth":95,"text":1040},{"id":1046,"depth":95,"text":1049},{"id":1068,"depth":77,"text":1069,"children":2016},[2017,2018,2019,2020],{"id":1072,"depth":84,"text":1073},{"id":1083,"depth":84,"text":1084},{"id":1094,"depth":84,"text":1095},{"id":1197,"depth":84,"text":1198},{"id":1207,"depth":77,"text":1207,"children":2022},[2023,2024],{"id":1210,"depth":84,"text":1211},{"id":1585,"depth":84,"text":1586},{"id":1765,"depth":77,"text":1766,"children":2026},[2027,2030,2031],{"id":1769,"depth":84,"text":1770,"children":2028},[2029],{"id":1773,"depth":95,"text":1774},{"id":1877,"depth":84,"text":1878},{"id":1888,"depth":84,"text":1889,"children":2032},[2033],{"id":1892,"depth":95,"text":1893},"Linux","2026-08-01","记录学习Linux过程中踩过的各种坑",false,"md",{},"\u002Fwiki\u002Flinux\u002Flinux-1f4000d",{"title":5,"description":2036},"wiki\u002Flinux\u002Flinux-1f4000d",[2034],"wiki","-GMqlCHh9LjzR-5MW1M4ua0h1OoLNPCYN9UbYCJgDHU",[2047,2214,3705,3719,3871,5432],{"id":2048,"title":2049,"body":2050,"category":2206,"date":2035,"description":2207,"draft":2037,"extension":2038,"featured":2037,"meta":2208,"navigation":551,"path":2209,"seo":2210,"stem":2211,"tags":2212,"type":2044,"__hash__":2213},"content\u002Fwiki\u002Fai-agent\u002Fclaude-code-install.md","Claude Code Install",{"type":7,"value":2051,"toc":2202},[2052,2055,2070,2074,2077,2098,2101,2174,2178,2187,2190,2199],[22,2053,2054],{},"资料",[2056,2057,2058],"blockquote",{},[22,2059,2060,2065],{},[235,2061,2064],{"href":2062,"rel":2063},"https:\u002F\u002Fwww.runoob.com\u002Fclaude-code\u002Fclaude-code-install.html",[239],"菜鸟教程 - Claude Code 安装",[235,2066,2069],{"href":2067,"rel":2068},"https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fzh-CN\u002Fquickstart#native-install-recommended",[239],"Claude Code 官方文档 - 快速开始",[10,2071,2073],{"id":2072},"一安装-claude","一、安装 claude",[22,2075,2076],{},"使用官方命令行安装",[53,2078,2080],{"className":1908,"code":2079,"language":1057,"meta":58,"style":58},"curl -fsSL https:\u002F\u002Fclaude.ai\u002Finstall.sh | bash\n",[60,2081,2082],{"__ignoreMap":58},[63,2083,2084,2087,2090,2093,2095],{"class":65,"line":66},[63,2085,2086],{"class":69},"curl",[63,2088,2089],{"class":137}," -fsSL",[63,2091,2092],{"class":73}," https:\u002F\u002Fclaude.ai\u002Finstall.sh",[63,2094,413],{"class":412},[63,2096,2097],{"class":69}," bash\n",[22,2099,2100],{},"安装完成后若使用fish,需要添加`PATH",[53,2102,2104],{"className":1908,"code":2103,"language":1057,"meta":58,"style":58},"# install path\nls ~\u002F.local\u002Fbin\n# add claude path to fish\nfish_add_path ~\u002F.local\u002Fbin\n# update fish\nsource ~\u002F.config\u002Ffish\u002Fconfig.fish\n#check version\nclaude --version\n#显示\n2.1.150 (Claude Code)\n",[60,2105,2106,2111,2118,2123,2130,2135,2142,2147,2155,2160],{"__ignoreMap":58},[63,2107,2108],{"class":65,"line":66},[63,2109,2110],{"class":80},"# install path\n",[63,2112,2113,2115],{"class":65,"line":77},[63,2114,1221],{"class":69},[63,2116,2117],{"class":73}," ~\u002F.local\u002Fbin\n",[63,2119,2120],{"class":65,"line":84},[63,2121,2122],{"class":80},"# add claude path to fish\n",[63,2124,2125,2128],{"class":65,"line":95},[63,2126,2127],{"class":69},"fish_add_path",[63,2129,2117],{"class":73},[63,2131,2132],{"class":65,"line":101},[63,2133,2134],{"class":80},"# update fish\n",[63,2136,2137,2140],{"class":65,"line":114},[63,2138,2139],{"class":137},"source",[63,2141,1817],{"class":73},[63,2143,2144],{"class":65,"line":120},[63,2145,2146],{"class":80},"#check version\n",[63,2148,2149,2152],{"class":65,"line":126},[63,2150,2151],{"class":69},"claude",[63,2153,2154],{"class":137}," --version\n",[63,2156,2157],{"class":65,"line":134},[63,2158,2159],{"class":80},"#显示\n",[63,2161,2162,2165,2168,2171],{"class":65,"line":397},[63,2163,2164],{"class":69},"2.1.150",[63,2166,2167],{"class":110}," (Claude ",[63,2169,2170],{"class":73},"Code",[63,2172,2173],{"class":110},")\n",[10,2175,2177],{"id":2176},"安装cc-switch","安装CC switch",[2056,2179,2180],{},[22,2181,2182],{},[235,2183,2186],{"href":2184,"rel":2185},"https:\u002F\u002Fccswitch.io\u002Fzh\u002F",[239],"CC Switch 官网",[22,2188,2189],{},"deepseek接入cc",[2056,2191,2192],{},[22,2193,2194],{},[235,2195,2198],{"href":2196,"rel":2197},"https:\u002F\u002Fapi-docs.deepseek.com\u002Fzh-cn\u002Fquick_start\u002Fagent_integrations\u002Fclaude_code",[239],"DeepSeek API 文档 - Claude Code 集成",[1995,2200,2201],{},"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 .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}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 .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}",{"title":58,"searchDepth":95,"depth":95,"links":2203},[2204,2205],{"id":2072,"depth":77,"text":2073},{"id":2176,"depth":77,"text":2177},"AI Agent","安装Claude Code 简易方式",{},"\u002Fwiki\u002Fai-agent\u002Fclaude-code-install",{"title":2049,"description":2207},"wiki\u002Fai-agent\u002Fclaude-code-install",[2206],"wFuq035X-fOKCL1To6aFxYsDdbGqlfD3LI4AO2_wi4c",{"id":2215,"title":2216,"body":2217,"category":2034,"date":3697,"description":3698,"draft":2037,"extension":2038,"featured":2037,"meta":3699,"navigation":551,"path":3700,"seo":3701,"stem":3702,"tags":3703,"type":2044,"__hash__":3704},"content\u002Fwiki\u002Flinux\u002Fniri-dms-using-clue\u002Fdms-keys.md","DMS keys",{"type":7,"value":2218,"toc":3685},[2219,2224,2268,2272,2404,2407,2411,2630,2634,2783,2787,3123,3127,3279,3283,3412,3416,3584,3588,3618,3620,3624],[2220,2221,2223],"h1",{"id":2222},"niri-dms-自定义快捷键指南","🎹 niri + DMS 自定义快捷键指南",[2056,2225,2226,2233],{},[22,2227,2228,2229,2232],{},"💡 ",[14,2230,2231],{},"提示","：",[1895,2234,2235,2250,2257],{},[1779,2236,2237,2238,2241,2242,2245,2246,2249],{},"配置中的 ",[60,2239,2240],{},"Mod"," 与 ",[60,2243,2244],{},"Super"," 等效，默认对应键盘 ",[14,2247,2248],{},"Win 键","。",[1779,2251,2252,2253,2256],{},"所有快捷键已按你提供的 ",[60,2254,2255],{},"binds {}"," 区块逐行解析，无默认值假设。",[1779,2258,2259,2260,2263,2264,2267],{},"修改保存后，按 ",[60,2261,2262],{},"Mod+Shift+R"," 或终端执行 ",[60,2265,2266],{},"niri msg action reload-config"," 热重载。",[10,2269,2271],{"id":2270},"️-核心键位变更提示-你的自定义布局","⚠️ 核心键位变更提示 (你的自定义布局)",[2273,2274,2275,2292],"table",{},[2276,2277,2278],"thead",{},[2279,2280,2281,2286,2289],"tr",{},[2282,2283,2285],"th",{"align":2284},"left","原默认行为",[2282,2287,2288],{"align":2284},"你的新绑定",[2282,2290,2291],{"align":2284},"说明",[2293,2294,2295,2314,2332,2350,2368,2386],"tbody",{},[2279,2296,2297,2304,2309],{},[2298,2299,2300,2303],"td",{"align":2284},[60,2301,2302],{},"Mod+K"," 焦点上移",[2298,2305,2306],{"align":2284},[60,2307,2308],{},"focus-workspace-down",[2298,2310,2311],{"align":2284},[14,2312,2313],{},"K 现用于切换下一工作区",[2279,2315,2316,2322,2327],{},[2298,2317,2318,2321],{"align":2284},[60,2319,2320],{},"Mod+U"," 工作区下移",[2298,2323,2324],{"align":2284},[60,2325,2326],{},"focus-window-up",[2298,2328,2329],{"align":2284},[14,2330,2331],{},"U 现用于同列窗口上移",[2279,2333,2334,2340,2345],{},[2298,2335,2336,2339],{"align":2284},[60,2337,2338],{},"Mod+H"," 焦点左移",[2298,2341,2342],{"align":2284},[60,2343,2344],{},"focus-window-down",[2298,2346,2347],{"align":2284},[14,2348,2349],{},"H 现用于同列窗口下移",[2279,2351,2352,2358,2363],{},[2298,2353,2354,2357],{"align":2284},[60,2355,2356],{},"Mod+J"," 焦点下移",[2298,2359,2360],{"align":2284},[60,2361,2362],{},"focus-column-left",[2298,2364,2365],{"align":2284},[14,2366,2367],{},"J 现用于焦点左移列",[2279,2369,2370,2376,2381],{},[2298,2371,2372,2375],{"align":2284},[60,2373,2374],{},"Mod+Shift+H"," 列左移",[2298,2377,2378],{"align":2284},[60,2379,2380],{},"move-window-down",[2298,2382,2383],{"align":2284},[14,2384,2385],{},"Shift+H 现用于窗口下移",[2279,2387,2388,2394,2399],{},[2298,2389,2390,2393],{"align":2284},[60,2391,2392],{},"Mod+Shift+J"," 窗口下移",[2298,2395,2396],{"align":2284},[60,2397,2398],{},"move-column-left",[2298,2400,2401],{"align":2284},[14,2402,2403],{},"Shift+J 现用于整列左移",[2405,2406],"hr",{},[10,2408,2410],{"id":2409},"️-系统与-dms-桌面交互","🖥️ 系统与 DMS 桌面交互",[2273,2412,2413,2426],{},[2276,2414,2415],{},[2279,2416,2417,2420,2423],{},[2282,2418,2419],{"align":2284},"快捷键",[2282,2421,2422],{"align":2284},"功能",[2282,2424,2425],{"align":2284},"备注",[2293,2427,2428,2441,2454,2467,2480,2493,2506,2519,2532,2545,2558,2575,2591,2604,2617],{},[2279,2429,2430,2435,2438],{},[2298,2431,2432],{"align":2284},[60,2433,2434],{},"Mod+Space",[2298,2436,2437],{"align":2284},"应用启动器 (Spotlight)",[2298,2439,2440],{"align":2284},"全局搜索与启动应用",[2279,2442,2443,2448,2451],{},[2298,2444,2445],{"align":2284},[60,2446,2447],{},"Mod+,",[2298,2449,2450],{"align":2284},"系统设置",[2298,2452,2453],{"align":2284},"打开 DMS 配置面板",[2279,2455,2456,2461,2464],{},[2298,2457,2458],{"align":2284},[60,2459,2460],{},"Mod+N",[2298,2462,2463],{"align":2284},"通知中心",[2298,2465,2466],{"align":2284},"查看\u002F清除桌面通知",[2279,2468,2469,2474,2477],{},[2298,2470,2471],{"align":2284},[60,2472,2473],{},"Mod+V",[2298,2475,2476],{"align":2284},"剪贴板管理器",[2298,2478,2479],{"align":2284},"历史粘贴板记录",[2279,2481,2482,2487,2490],{},[2298,2483,2484],{"align":2284},[60,2485,2486],{},"Mod+Shift+N",[2298,2488,2489],{"align":2284},"记事本",[2298,2491,2492],{"align":2284},"快速临时笔记",[2279,2494,2495,2500,2503],{},[2298,2496,2497],{"align":2284},[60,2498,2499],{},"Mod+Shift+W",[2298,2501,2502],{"align":2284},"窗口规则编辑器",[2298,2504,2505],{"align":2284},"自定义应用浮动\u002F固定策略",[2279,2507,2508,2513,2516],{},[2298,2509,2510],{"align":2284},[60,2511,2512],{},"Mod+Y",[2298,2514,2515],{"align":2284},"壁纸管理",[2298,2517,2518],{"align":2284},"浏览与切换壁纸",[2279,2520,2521,2526,2529],{},[2298,2522,2523],{"align":2284},[60,2524,2525],{},"Super+X",[2298,2527,2528],{"align":2284},"电源菜单",[2298,2530,2531],{"align":2284},"关机\u002F重启\u002F注销\u002F休眠",[2279,2533,2534,2539,2542],{},[2298,2535,2536],{"align":2284},[60,2537,2538],{},"Mod+Shift+E",[2298,2540,2541],{"align":2284},"退出 niri",[2298,2543,2544],{"align":2284},"结束当前图形会话",[2279,2546,2547,2552,2555],{},[2298,2548,2549],{"align":2284},[60,2550,2551],{},"Mod+Alt+L",[2298,2553,2554],{"align":2284},"锁屏",[2298,2556,2557],{"align":2284},"锁定屏幕并待机",[2279,2559,2560,2569,2572],{},[2298,2561,2562,2565,2566],{"align":2284},[60,2563,2564],{},"Mod+M"," \u002F ",[60,2567,2568],{},"Ctrl+Alt+Del",[2298,2570,2571],{"align":2284},"任务管理器",[2298,2573,2574],{"align":2284},"进程监控与资源管理",[2279,2576,2577,2585,2588],{},[2298,2578,2579,2565,2582],{"align":2284},[60,2580,2581],{},"Mod+D",[60,2583,2584],{},"Mod+Tab",[2298,2586,2587],{"align":2284},"总览视图 (Overview)",[2298,2589,2590],{"align":2284},"查看所有工作区与窗口缩略图",[2279,2592,2593,2598,2601],{},[2298,2594,2595],{"align":2284},[60,2596,2597],{},"Mod+Esc",[2298,2599,2600],{"align":2284},"快捷键拦截开关",[2298,2602,2603],{"align":2284},"允许当前应用独占组合键",[2279,2605,2606,2611,2614],{},[2298,2607,2608],{"align":2284},[60,2609,2610],{},"Mod+Shift+\u002F",[2298,2612,2613],{"align":2284},"显示快捷键提示",[2298,2615,2616],{"align":2284},"屏幕浮层显示可用快捷键",[2279,2618,2619,2624,2627],{},[2298,2620,2621],{"align":2284},[60,2622,2623],{},"Ctrl+Shift+R",[2298,2625,2626],{"align":2284},"重命名工作区",[2298,2628,2629],{"align":2284},"自定义工作区名称标签",[10,2631,2633],{"id":2632},"工作区-workspace-导航","📂 工作区 (Workspace) 导航",[2273,2635,2636,2646],{},[2276,2637,2638],{},[2279,2639,2640,2642,2644],{},[2282,2641,2419],{"align":2284},[2282,2643,2422],{"align":2284},[2282,2645,2425],{"align":2284},[2293,2647,2648,2665,2684,2704,2719,2734,2748,2766],{},[2279,2649,2650,2659,2662],{},[2298,2651,2652,2655,2656],{"align":2284},[60,2653,2654],{},"Mod+1"," ~ ",[60,2657,2658],{},"9",[2298,2660,2661],{"align":2284},"跳转至指定工作区",[2298,2663,2664],{"align":2284},"快速切换 1~9 号",[2279,2666,2667,2678,2681],{},[2298,2668,2669,2565,2672,2565,2675],{"align":2284},[60,2670,2671],{},"Mod+I",[60,2673,2674],{},"PageUp",[60,2676,2677],{},"滚轮上",[2298,2679,2680],{"align":2284},"上一工作区",[2298,2682,2683],{"align":2284},"纵向向上滚动",[2279,2685,2686,2696,2699],{},[2298,2687,2688,2565,2690,2565,2693],{"align":2284},[60,2689,2302],{},[60,2691,2692],{},"PageDown",[60,2694,2695],{},"滚轮下",[2298,2697,2698],{"align":2284},"下一工作区",[2298,2700,2701],{"align":2284},[14,2702,2703],{},"⚠️ 你的自定义：K 切工作区",[2279,2705,2706,2713,2716],{},[2298,2707,2708,2655,2711],{"align":2284},[60,2709,2710],{},"Mod+Shift+1",[60,2712,2658],{},[2298,2714,2715],{"align":2284},"当前列移至指定工作区",[2298,2717,2718],{"align":2284},"批量迁移窗口组",[2279,2720,2721,2728,2731],{},[2298,2722,2723,2565,2726],{"align":2284},[60,2724,2725],{},"Mod+Shift+I",[60,2727,2674],{},[2298,2729,2730],{"align":2284},"工作区顺序上移",[2298,2732,2733],{"align":2284},"调整纵向排列",[2279,2735,2736,2743,2746],{},[2298,2737,2738,2565,2741],{"align":2284},[60,2739,2740],{},"Mod+Shift+K",[60,2742,2692],{},[2298,2744,2745],{"align":2284},"工作区顺序下移",[2298,2747,2733],{"align":2284},[2279,2749,2750,2760,2763],{},[2298,2751,2752,2565,2755,2565,2758],{"align":2284},[60,2753,2754],{},"Mod+Ctrl+I",[60,2756,2757],{},"Up",[60,2759,2677],{},[2298,2761,2762],{"align":2284},"列移至上一工作区",[2298,2764,2765],{"align":2284},"带窗口跨区移动",[2279,2767,2768,2778,2781],{},[2298,2769,2770,2565,2773,2565,2776],{"align":2284},[60,2771,2772],{},"Mod+Ctrl+K",[60,2774,2775],{},"Down",[60,2777,2695],{},[2298,2779,2780],{"align":2284},"列移至下一工作区",[2298,2782,2765],{"align":2284},[10,2784,2786],{"id":2785},"窗口与列-column-布局控制","🪟 窗口与列 (Column) 布局控制",[2273,2788,2789,2799],{},[2276,2790,2791],{},[2279,2792,2793,2795,2797],{},[2282,2794,2419],{"align":2284},[2282,2796,2422],{"align":2284},[2282,2798,2425],{"align":2284},[2293,2800,2801,2814,2827,2840,2853,2866,2879,2892,2904,2917,2930,2943,2956,2969,2982,2998,3011,3027,3042,3057,3072,3085,3097,3110],{},[2279,2802,2803,2808,2811],{},[2298,2804,2805],{"align":2284},[60,2806,2807],{},"Mod+Q",[2298,2809,2810],{"align":2284},"关闭当前窗口",[2298,2812,2813],{"align":2284},"安全退出",[2279,2815,2816,2821,2824],{},[2298,2817,2818],{"align":2284},[60,2819,2820],{},"Mod+Shift+T",[2298,2822,2823],{"align":2284},"切换浮动\u002F平铺",[2298,2825,2826],{"align":2284},"脱离平铺自由拖拽",[2279,2828,2829,2834,2837],{},[2298,2830,2831],{"align":2284},[60,2832,2833],{},"Mod+Shift+V",[2298,2835,2836],{"align":2284},"焦点切换浮\u002F平",[2298,2838,2839],{"align":2284},"快速跳转两类窗口",[2279,2841,2842,2847,2850],{},[2298,2843,2844],{"align":2284},[60,2845,2846],{},"Mod+Shift+F",[2298,2848,2849],{"align":2284},"窗口全屏",[2298,2851,2852],{"align":2284},"切换焦点窗口全屏",[2279,2854,2855,2860,2863],{},[2298,2856,2857],{"align":2284},[60,2858,2859],{},"Mod+F",[2298,2861,2862],{"align":2284},"最大化当前列",[2298,2864,2865],{"align":2284},"列占满垂直空间",[2279,2867,2868,2873,2876],{},[2298,2869,2870],{"align":2284},[60,2871,2872],{},"Mod+W",[2298,2874,2875],{"align":2284},"切换列标签页模式",[2298,2877,2878],{"align":2284},"多窗口堆叠为 Tab",[2279,2880,2881,2886,2889],{},[2298,2882,2883],{"align":2284},[60,2884,2885],{},"Mod+R",[2298,2887,2888],{"align":2284},"切换预设列宽",[2298,2890,2891],{"align":2284},"循环 30%\u002F50%\u002F70%",[2279,2893,2894,2898,2901],{},[2298,2895,2896],{"align":2284},[60,2897,2262],{},[2298,2899,2900],{"align":2284},"切换预设窗口高度",[2298,2902,2903],{"align":2284},"循环高度比例",[2279,2905,2906,2911,2914],{},[2298,2907,2908],{"align":2284},[60,2909,2910],{},"Mod+C",[2298,2912,2913],{"align":2284},"居中当前列",[2298,2915,2916],{"align":2284},"水平居中",[2279,2918,2919,2924,2927],{},[2298,2920,2921],{"align":2284},[60,2922,2923],{},"Mod+Ctrl+C",[2298,2925,2926],{"align":2284},"居中可见列",[2298,2928,2929],{"align":2284},"所有可见列整体居中",[2279,2931,2932,2937,2940],{},[2298,2933,2934],{"align":2284},[60,2935,2936],{},"Mod+Ctrl+Home",[2298,2938,2939],{"align":2284},"列移至最左",[2298,2941,2942],{"align":2284},"工作区起始位置",[2279,2944,2945,2950,2953],{},[2298,2946,2947],{"align":2284},[60,2948,2949],{},"Mod+Ctrl+End",[2298,2951,2952],{"align":2284},"列移至最右",[2298,2954,2955],{"align":2284},"工作区末尾位置",[2279,2957,2958,2963,2966],{},[2298,2959,2960],{"align":2284},[60,2961,2962],{},"Mod+Ctrl+F",[2298,2964,2965],{"align":2284},"列宽扩展至可用",[2298,2967,2968],{"align":2284},"填满左右空白",[2279,2970,2971,2976,2979],{},[2298,2972,2973],{"align":2284},[60,2974,2975],{},"Mod+Ctrl+R",[2298,2977,2978],{"align":2284},"重置窗口高度",[2298,2980,2981],{"align":2284},"恢复默认比例",[2279,2983,2984,2992,2995],{},[2298,2985,2986,2565,2989],{"align":2284},[60,2987,2988],{},"Mod+[",[60,2990,2991],{},"]",[2298,2993,2994],{"align":2284},"窗口吞入\u002F排出列",[2298,2996,2997],{"align":2284},"合并到左\u002F右相邻列",[2279,2999,3000,3005,3008],{},[2298,3001,3002],{"align":2284},[60,3003,3004],{},"Mod+.",[2298,3006,3007],{"align":2284},"窗口独立成新列",[2298,3009,3010],{"align":2284},"从当前列拆分",[2279,3012,3013,3021,3024],{},[2298,3014,3015,2565,3018],{"align":2284},[60,3016,3017],{},"Mod+=",[60,3019,3020],{},"-",[2298,3022,3023],{"align":2284},"列宽 ±10%",[2298,3025,3026],{"align":2284},"精细调整宽度",[2279,3028,3029,3036,3039],{},[2298,3030,3031,2565,3034],{"align":2284},[60,3032,3033],{},"Mod+Shift+=",[60,3035,3020],{},[2298,3037,3038],{"align":2284},"窗口高度 ±10%",[2298,3040,3041],{"align":2284},"精细调整高度",[2279,3043,3044,3051,3054],{},[2298,3045,3046,2565,3049],{"align":2284},[60,3047,3048],{},"Mod+Shift+Left",[60,3050,2677],{},[2298,3052,3053],{"align":2284},"整列左移",[2298,3055,3056],{"align":2284},"列及内部窗口左移",[2279,3058,3059,3066,3069],{},[2298,3060,3061,2565,3064],{"align":2284},[60,3062,3063],{},"Mod+Shift+Right",[60,3065,2695],{},[2298,3067,3068],{"align":2284},"整列右移",[2298,3070,3071],{"align":2284},"列及内部窗口右移",[2279,3073,3074,3079,3082],{},[2298,3075,3076],{"align":2284},[60,3077,3078],{},"Mod+Shift+Down",[2298,3080,3081],{"align":2284},"窗口在列内下移",[2298,3083,3084],{"align":2284},"调整同列上下顺序",[2279,3086,3087,3092,3095],{},[2298,3088,3089],{"align":2284},[60,3090,3091],{},"Mod+Shift+Up",[2298,3093,3094],{"align":2284},"窗口在列内上移",[2298,3096,3084],{"align":2284},[2279,3098,3099,3104,3107],{},[2298,3100,3101],{"align":2284},[60,3102,3103],{},"Mod+Ctrl+Shift+滚轮上\u002F下",[2298,3105,3106],{"align":2284},"滚轮快移左\u002F右列",[2298,3108,3109],{"align":2284},"加速列位置调整",[2279,3111,3112,3117,3120],{},[2298,3113,3114],{"align":2284},[60,3115,3116],{},"Mod+Ctrl+滚轮左\u002F右",[2298,3118,3119],{"align":2284},"滚轮移左\u002F右列",[2298,3121,3122],{"align":2284},"基础列移动",[10,3124,3126],{"id":3125},"焦点与导航-你的自定义映射","🎯 焦点与导航 (你的自定义映射)",[2273,3128,3129,3139],{},[2276,3130,3131],{},[2279,3132,3133,3135,3137],{},[2282,3134,2419],{"align":2284},[2282,3136,2422],{"align":2284},[2282,3138,2425],{"align":2284},[2293,3140,3141,3155,3168,3182,3201,3216,3228,3240,3253,3266],{},[2279,3142,3143,3147,3150],{},[2298,3144,3145],{"align":2284},[60,3146,2338],{},[2298,3148,3149],{"align":2284},"焦点下移窗口",[2298,3151,3152],{"align":2284},[14,3153,3154],{},"⚠️ 你的自定义",[2279,3156,3157,3161,3164],{},[2298,3158,3159],{"align":2284},[60,3160,2320],{},[2298,3162,3163],{"align":2284},"焦点上移窗口",[2298,3165,3166],{"align":2284},[14,3167,3154],{},[2279,3169,3170,3174,3177],{},[2298,3171,3172],{"align":2284},[60,3173,2356],{},[2298,3175,3176],{"align":2284},"焦点左移列",[2298,3178,3179],{"align":2284},[14,3180,3181],{},"️ 你的自定义",[2279,3183,3184,3195,3198],{},[2298,3185,3186,2565,3189,2565,3192],{"align":2284},[60,3187,3188],{},"Mod+L",[60,3190,3191],{},"Right",[60,3193,3194],{},"滚轮右",[2298,3196,3197],{"align":2284},"焦点右移列",[2298,3199,3200],{"align":2284},"向右切换列焦点",[2279,3202,3203,3211,3213],{},[2298,3204,3205,2565,3208],{"align":2284},[60,3206,3207],{},"Mod+Left",[60,3209,3210],{},"滚轮左",[2298,3212,3176],{"align":2284},[2298,3214,3215],{"align":2284},"向左切换列焦点",[2279,3217,3218,3223,3225],{},[2298,3219,3220],{"align":2284},[60,3221,3222],{},"Mod+Down",[2298,3224,3149],{"align":2284},[2298,3226,3227],{"align":2284},"同列向下切换",[2279,3229,3230,3235,3237],{},[2298,3231,3232],{"align":2284},[60,3233,3234],{},"Mod+Up",[2298,3236,3163],{"align":2284},[2298,3238,3239],{"align":2284},"同列向上切换",[2279,3241,3242,3247,3250],{},[2298,3243,3244],{"align":2284},[60,3245,3246],{},"Mod+Home",[2298,3248,3249],{"align":2284},"焦点跳至第一列",[2298,3251,3252],{"align":2284},"快速回顶部",[2279,3254,3255,3260,3263],{},[2298,3256,3257],{"align":2284},[60,3258,3259],{},"Mod+End",[2298,3261,3262],{"align":2284},"焦点跳至最后一列",[2298,3264,3265],{"align":2284},"快速跳尾部",[2279,3267,3268,3273,3276],{},[2298,3269,3270],{"align":2284},[60,3271,3272],{},"Mod+Shift+滚轮上\u002F下",[2298,3274,3275],{"align":2284},"滚轮快切左\u002F右列焦点",[2298,3277,3278],{"align":2284},"加速焦点移动",[10,3280,3282],{"id":3281},"️-多显示器-monitor-控制","🖥️ 多显示器 (Monitor) 控制",[2273,3284,3285,3295],{},[2276,3286,3287],{},[2279,3288,3289,3291,3293],{},[2282,3290,2419],{"align":2284},[2282,3292,2422],{"align":2284},[2282,3294,2425],{"align":2284},[2293,3296,3297,3310,3324,3337,3351,3367,3382,3397],{},[2279,3298,3299,3304,3307],{},[2298,3300,3301],{"align":2284},[60,3302,3303],{},"Mod+Ctrl+Left",[2298,3305,3306],{"align":2284},"焦点切至左侧显示器",[2298,3308,3309],{"align":2284},"跨屏跳转",[2279,3311,3312,3317,3320],{},[2298,3313,3314],{"align":2284},[60,3315,3316],{},"Mod+Ctrl+H",[2298,3318,3319],{"align":2284},"焦点切至下方显示器",[2298,3321,3322],{"align":2284},[14,3323,3154],{},[2279,3325,3326,3330,3333],{},[2298,3327,3328],{"align":2284},[60,3329,2772],{},[2298,3331,3332],{"align":2284},"焦点切至上方显示器",[2298,3334,3335],{"align":2284},[14,3336,3154],{},[2279,3338,3339,3346,3349],{},[2298,3340,3341,2565,3344],{"align":2284},[60,3342,3343],{},"Mod+Ctrl+L",[60,3345,3191],{},[2298,3347,3348],{"align":2284},"焦点切至右侧显示器",[2298,3350,3309],{"align":2284},[2279,3352,3353,3361,3364],{},[2298,3354,3355,2565,3358],{"align":2284},[60,3356,3357],{},"Mod+Shift+Ctrl+Left",[60,3359,3360],{},"H",[2298,3362,3363],{"align":2284},"列移至左\u002F下显示器",[2298,3365,3366],{"align":2284},"窗口跨屏移动",[2279,3368,3369,3377,3380],{},[2298,3370,3371,2565,3374],{"align":2284},[60,3372,3373],{},"Mod+Shift+Ctrl+Right",[60,3375,3376],{},"L",[2298,3378,3379],{"align":2284},"列移至右\u002F右显示器",[2298,3381,3366],{"align":2284},[2279,3383,3384,3392,3395],{},[2298,3385,3386,2565,3389],{"align":2284},[60,3387,3388],{},"Mod+Shift+Ctrl+Up",[60,3390,3391],{},"K",[2298,3393,3394],{"align":2284},"列移至上\u002F上显示器",[2298,3396,3366],{"align":2284},[2279,3398,3399,3407,3410],{},[2298,3400,3401,2565,3404],{"align":2284},[60,3402,3403],{},"Mod+Shift+Ctrl+Down",[60,3405,3406],{},"J",[2298,3408,3409],{"align":2284},"列移至下\u002F下显示器",[2298,3411,3366],{"align":2284},[10,3413,3415],{"id":3414},"截图媒体与硬件按键","📸 截图、媒体与硬件按键",[2273,3417,3418,3428],{},[2276,3419,3420],{},[2279,3421,3422,3424,3426],{},[2282,3423,2419],{"align":2284},[2282,3425,2422],{"align":2284},[2282,3427,2425],{"align":2284},[2293,3429,3430,3446,3462,3478,3491,3504,3517,3530,3543,3556,3571],{},[2279,3431,3432,3440,3443],{},[2298,3433,3434,2565,3437],{"align":2284},[60,3435,3436],{},"Print",[60,3438,3439],{},"XF86Launch1",[2298,3441,3442],{"align":2284},"区域截图",[2298,3444,3445],{"align":2284},"鼠标框选截图",[2279,3447,3448,3456,3459],{},[2298,3449,3450,2565,3453],{"align":2284},[60,3451,3452],{},"Ctrl+Print",[60,3454,3455],{},"Ctrl+XF86Launch1",[2298,3457,3458],{"align":2284},"截取当前屏幕",[2298,3460,3461],{"align":2284},"全屏截图",[2279,3463,3464,3472,3475],{},[2298,3465,3466,2565,3469],{"align":2284},[60,3467,3468],{},"Alt+Print",[60,3470,3471],{},"Alt+XF86Launch1",[2298,3473,3474],{"align":2284},"截取当前窗口",[2298,3476,3477],{"align":2284},"仅焦点窗口",[2279,3479,3480,3485,3488],{},[2298,3481,3482],{"align":2284},[60,3483,3484],{},"Mod+Shift+P",[2298,3486,3487],{"align":2284},"关闭显示器电源",[2298,3489,3490],{"align":2284},"硬件级息屏",[2279,3492,3493,3498,3501],{},[2298,3494,3495],{"align":2284},[60,3496,3497],{},"XF86AudioMute",[2298,3499,3500],{"align":2284},"系统静音",[2298,3502,3503],{"align":2284},"全局音频静音",[2279,3505,3506,3511,3514],{},[2298,3507,3508],{"align":2284},[60,3509,3510],{},"XF86AudioMicMute",[2298,3512,3513],{"align":2284},"麦克风静音",[2298,3515,3516],{"align":2284},"硬件麦克风开关",[2279,3518,3519,3524,3527],{},[2298,3520,3521],{"align":2284},[60,3522,3523],{},"XF86AudioLower\u002FRaiseVolume",[2298,3525,3526],{"align":2284},"系统音量 ±3%",[2298,3528,3529],{"align":2284},"调整主音量",[2279,3531,3532,3537,3540],{},[2298,3533,3534],{"align":2284},[60,3535,3536],{},"Ctrl+XF86AudioLower\u002FRaiseVolume",[2298,3538,3539],{"align":2284},"媒体音量 ±3%",[2298,3541,3542],{"align":2284},"调整播放器音量",[2279,3544,3545,3550,3553],{},[2298,3546,3547],{"align":2284},[60,3548,3549],{},"XF86AudioPlay\u002FPause",[2298,3551,3552],{"align":2284},"播放 \u002F 暂停",[2298,3554,3555],{"align":2284},"媒体控制",[2279,3557,3558,3566,3569],{},[2298,3559,3560,2565,3563],{"align":2284},[60,3561,3562],{},"XF86AudioNext",[60,3564,3565],{},"Prev",[2298,3567,3568],{"align":2284},"下一曲 \u002F 上一曲",[2298,3570,3555],{"align":2284},[2279,3572,3573,3578,3581],{},[2298,3574,3575],{"align":2284},[60,3576,3577],{},"XF86MonBrightnessUp\u002FDown",[2298,3579,3580],{"align":2284},"屏幕亮度 ±5%",[2298,3582,3583],{"align":2284},"调整显示器亮度",[10,3585,3587],{"id":3586},"️-开发与快捷启动","🛠️ 开发与快捷启动",[2273,3589,3590,3600],{},[2276,3591,3592],{},[2279,3593,3594,3596,3598],{},[2282,3595,2419],{"align":2284},[2282,3597,2422],{"align":2284},[2282,3599,2425],{"align":2284},[2293,3601,3602],{},[2279,3603,3604,3609,3612],{},[2298,3605,3606],{"align":2284},[60,3607,3608],{},"Mod+T",[2298,3610,3611],{"align":2284},"打开终端",[2298,3613,3614,3615],{"align":2284},"默认启动 ",[60,3616,3617],{},"kitty",[2405,3619],{},[17,3621,3623],{"id":3622},"使用建议","📌 使用建议",[1776,3625,3626,3636,3652,3658],{},[1779,3627,3628,3631,3632,3635],{},[14,3629,3630],{},"肌肉记忆重塑","：你的 ",[60,3633,3634],{},"H\u002FJ\u002FK\u002FU"," 布局已完全自定义，建议打印此表贴于显示器旁，3~5 天即可形成新反射。",[1779,3637,3638,3641,3642,3644,3645,3647,3648,3651],{},[14,3639,3640],{},"冲突排查","：若 ",[60,3643,2302],{}," 或 ",[60,3646,2338],{}," 无响应，检查输入法（IBus\u002FFcitx）是否占用了相同组合键。可在输入法设置中关闭全局快捷键，或临时改用 ",[60,3649,3650],{},"Mod+Ctrl+字母"," 避开。",[1779,3653,3654,3657],{},[14,3655,3656],{},"滚轮辅助","：niri 原生支持滚轮切换工作区\u002F列，适合快速浏览；精细窗口操作建议保留键盘。",[1779,3659,3660,3663,3664,3667,3668,3644,3671,3674,3675,3678,3679,3681,3682,2249],{},[14,3661,3662],{},"持续迭代","：后续如需绑定 ",[60,3665,3666],{},"msim","、",[60,3669,3670],{},"ros2",[60,3672,3673],{},"yazi"," 快捷启动，直接在 ",[60,3676,3677],{},"~\u002F.config\u002Fniri\u002Fconfig.kdl"," 的 ",[60,3680,2255],{}," 末尾追加：",[60,3683,3684],{},"Mod+新键 { spawn \"你的命令\"; }",{"title":58,"searchDepth":95,"depth":95,"links":3686},[3687,3688,3689,3690,3691,3692,3693,3694],{"id":2270,"depth":77,"text":2271},{"id":2409,"depth":77,"text":2410},{"id":2632,"depth":77,"text":2633},{"id":2785,"depth":77,"text":2786},{"id":3125,"depth":77,"text":3126},{"id":3281,"depth":77,"text":3282},{"id":3414,"depth":77,"text":3415},{"id":3586,"depth":77,"text":3587,"children":3695},[3696],{"id":3622,"depth":84,"text":3623},"2026-08-19","DMS 快捷键",{},"\u002Fwiki\u002Flinux\u002Fniri-dms-using-clue\u002Fdms-keys",{"title":2216,"description":3698},"wiki\u002Flinux\u002Fniri-dms-using-clue\u002Fdms-keys",[2034],"pl82cOt2TJPmkJ3dgQCVIBinL8jbtgoN_CG_G_gYQy4",{"id":3706,"title":3707,"body":3708,"category":2034,"date":3697,"description":3712,"draft":2037,"extension":2038,"featured":2037,"meta":3713,"navigation":551,"path":3714,"seo":3715,"stem":3716,"tags":3717,"type":2044,"__hash__":3718},"content\u002Fwiki\u002Flinux\u002Fgit-6d8bf7c.md","Git使用方法",{"type":7,"value":3709,"toc":3710},[],{"title":58,"searchDepth":95,"depth":95,"links":3711},[],"Git仓库的简单使用方法",{},"\u002Fwiki\u002Flinux\u002Fgit-6d8bf7c",{"title":3707,"description":3712},"wiki\u002Flinux\u002Fgit-6d8bf7c",[2034],"LbyDd4lBEpIhIw8HOPEWR3dv9Gwr1ADtIN7FuMigvIE",{"id":3720,"title":3721,"body":3722,"category":2034,"date":2035,"description":3864,"draft":2037,"extension":2038,"featured":2037,"meta":3865,"navigation":551,"path":3866,"seo":3867,"stem":3868,"tags":3869,"type":2044,"__hash__":3870},"content\u002Fwiki\u002Flinux\u002Fyazi-d6f0b09.md","Yazi食用方法",{"type":7,"value":3723,"toc":3860},[3724,3728,3732,3775,3779],[2220,3725,3727],{"id":3726},"yazi简易使用方式","🦆yazi简易使用方式",[10,3729,3731],{"id":3730},"一yazi操作类","一、yazi操作类",[2273,3733,3734,3745],{},[2276,3735,3736],{},[2279,3737,3738,3741,3743],{},[2282,3739,3740],{"align":2284},"操作",[2282,3742,2419],{"align":2284},[2282,3744],{},[2293,3746,3747,3763],{},[2279,3748,3749,3752,3761],{},[2298,3750,3751],{"align":2284},"打开yazi",[2298,3753,3754,3757,3758,3760],{"align":2284},[60,3755,3756],{},"y","（或者",[60,3759,3673],{},"）",[2298,3762],{},[2279,3764,3765,3768,3773],{},[2298,3766,3767],{"align":2284},"关闭yazi",[2298,3769,3770],{"align":2284},[60,3771,3772],{},"q",[2298,3774],{},[10,3776,3778],{"id":3777},"二文件操作类","二、文件操作类",[2273,3780,3781,3791],{},[2276,3782,3783],{},[2279,3784,3785,3787,3789],{},[2282,3786,3740],{"align":2284},[2282,3788,2419],{"align":2284},[2282,3790],{},[2293,3792,3793,3806,3819,3833,3846],{},[2279,3794,3795,3800,3804],{},[2298,3796,3797],{"align":2284},[14,3798,3799],{},"创建文件",[2298,3801,3802],{"align":2284},[60,3803,235],{},[2298,3805],{},[2279,3807,3808,3813,3817],{},[2298,3809,3810],{"align":2284},[14,3811,3812],{},"复制文件",[2298,3814,3815],{"align":2284},[60,3816,3756],{},[2298,3818],{},[2279,3820,3821,3826,3831],{},[2298,3822,3823],{"align":2284},[14,3824,3825],{},"剪贴文件",[2298,3827,3828],{"align":2284},[60,3829,3830],{},"x",[2298,3832],{},[2279,3834,3835,3840,3844],{},[2298,3836,3837],{"align":2284},[14,3838,3839],{},"粘贴文件",[2298,3841,3842],{"align":2284},[60,3843,22],{},[2298,3845],{},[2279,3847,3848,3853,3858],{},[2298,3849,3850],{"align":2284},[14,3851,3852],{},"查找文件",[2298,3854,3855],{"align":2284},[60,3856,3857],{},"z",[2298,3859],{},{"title":58,"searchDepth":95,"depth":95,"links":3861},[3862,3863],{"id":3730,"depth":77,"text":3731},{"id":3777,"depth":77,"text":3778},"最美味的食材往往有着最朴素的烹饪方法",{},"\u002Fwiki\u002Flinux\u002Fyazi-d6f0b09",{"title":3721,"description":3864},"wiki\u002Flinux\u002Fyazi-d6f0b09",[2034],"B5Ck4m6PCAxllBEUvqxiZMYvr_hcx9GVI6vTJqMCWRs",{"id":4,"title":5,"body":3872,"category":2034,"date":2035,"description":2036,"draft":2037,"extension":2038,"featured":2037,"meta":5429,"navigation":551,"path":2040,"seo":5430,"stem":2042,"tags":5431,"type":2044,"__hash__":2045},{"type":7,"value":3873,"toc":5393},[3874,3878,3880,3884,3886,3888,3892,3894,3896,3898,3950,3952,4006,4010,4012,4016,4018,4023,4025,4027,4031,4061,4063,4079,4083,4173,4177,4179,4181,4185,4213,4215,4579,4581,4601,4605,4609,4611,4615,4619,4621,4625,4629,4631,4633,4637,4639,4641,4646,4648,4653,4655,4659,4725,4729,4731,4733,4737,4739,4741,5077,5079,5111,5185,5217,5219,5221,5223,5230,5232,5236,5240,5242,5272,5274,5300,5302,5307,5309,5311,5319,5391],[10,3875,3876],{"id":12},[14,3877,12],{},[17,3879,20],{"id":19},[22,3881,3882],{},[25,3883],{"alt":27,"src":28},[22,3885,31],{},[22,3887,34],{},[22,3889,3890],{},[25,3891],{"alt":39,"src":40},[17,3893,44],{"id":43},[22,3895,47],{},[17,3897,51],{"id":50},[53,3899,3900],{"className":55,"code":56,"language":57,"meta":58,"style":58},[60,3901,3902,3908,3912,3920,3924,3932,3936,3940,3946],{"__ignoreMap":58},[63,3903,3904,3906],{"class":65,"line":66},[63,3905,70],{"class":69},[63,3907,74],{"class":73},[63,3909,3910],{"class":65,"line":77},[63,3911,81],{"class":80},[63,3913,3914,3916,3918],{"class":65,"line":84},[63,3915,70],{"class":69},[63,3917,89],{"class":73},[63,3919,92],{"class":73},[63,3921,3922],{"class":65,"line":95},[63,3923,98],{"class":80},[63,3925,3926,3928,3930],{"class":65,"line":101},[63,3927,104],{"class":69},[63,3929,107],{"class":73},[63,3931,111],{"class":110},[63,3933,3934],{"class":65,"line":114},[63,3935,117],{"class":80},[63,3937,3938],{"class":65,"line":120},[63,3939,123],{"class":80},[63,3941,3942,3944],{"class":65,"line":126},[63,3943,104],{"class":69},[63,3945,131],{"class":73},[63,3947,3948],{"class":65,"line":134},[63,3949,138],{"class":137},[17,3951,142],{"id":141},[53,3953,3954],{"className":55,"code":145,"language":57,"meta":58,"style":58},[60,3955,3956,3960,3970,3982,3986,3990,4000],{"__ignoreMap":58},[63,3957,3958],{"class":65,"line":66},[63,3959,152],{"class":80},[63,3961,3962,3964,3966,3968],{"class":65,"line":77},[63,3963,70],{"class":69},[63,3965,159],{"class":73},[63,3967,162],{"class":73},[63,3969,165],{"class":110},[63,3971,3972,3974,3976,3978,3980],{"class":65,"line":84},[63,3973,70],{"class":69},[63,3975,159],{"class":73},[63,3977,174],{"class":73},[63,3979,177],{"class":73},[63,3981,180],{"class":73},[63,3983,3984],{"class":65,"line":95},[63,3985,185],{"class":80},[63,3987,3988],{"class":65,"line":101},[63,3989,190],{"class":80},[63,3991,3992,3994,3996,3998],{"class":65,"line":114},[63,3993,195],{"class":69},[63,3995,198],{"class":73},[63,3997,201],{"class":73},[63,3999,165],{"class":110},[63,4001,4002,4004],{"class":65,"line":120},[63,4003,70],{"class":69},[63,4005,210],{"class":73},[22,4007,4008],{},[25,4009],{"alt":215,"src":216},[17,4011,220],{"id":219},[22,4013,4014],{},[25,4015],{"alt":225,"src":226},[17,4017,230],{"id":229},[22,4019,233,4020],{},[235,4021,237],{"href":237,"rel":4022},[239],[17,4024,243],{"id":242},[22,4026,246],{},[22,4028,249,4029,253],{},[60,4030,252],{},[53,4032,4033],{"className":55,"code":256,"language":57,"meta":58,"style":58},[60,4034,4035,4039,4049,4053],{"__ignoreMap":58},[63,4036,4037],{"class":65,"line":66},[63,4038,263],{"class":80},[63,4040,4041,4043,4045,4047],{"class":65,"line":77},[63,4042,70],{"class":69},[63,4044,159],{"class":73},[63,4046,174],{"class":73},[63,4048,274],{"class":73},[63,4050,4051],{"class":65,"line":84},[63,4052,279],{"class":80},[63,4054,4055,4057,4059],{"class":65,"line":95},[63,4056,252],{"class":69},[63,4058,286],{"class":137},[63,4060,289],{"class":137},[17,4062,293],{"id":292},[53,4064,4065],{"className":55,"code":296,"language":57,"meta":58,"style":58},[60,4066,4067,4071],{"__ignoreMap":58},[63,4068,4069],{"class":65,"line":66},[63,4070,303],{"class":80},[63,4072,4073,4075,4077],{"class":65,"line":77},[63,4074,70],{"class":69},[63,4076,310],{"class":73},[63,4078,313],{"class":137},[22,4080,4081],{},[25,4082],{"alt":58,"src":318},[53,4084,4085],{"className":55,"code":321,"language":57,"meta":58,"style":58},[60,4086,4087,4091,4099,4103,4113,4117,4121,4131,4135,4145,4149,4161,4165],{"__ignoreMap":58},[63,4088,4089],{"class":65,"line":66},[63,4090,328],{"class":80},[63,4092,4093,4095,4097],{"class":65,"line":77},[63,4094,70],{"class":69},[63,4096,335],{"class":73},[63,4098,338],{"class":73},[63,4100,4101],{"class":65,"line":84},[63,4102,343],{"class":80},[63,4104,4105,4107,4109,4111],{"class":65,"line":95},[63,4106,70],{"class":69},[63,4108,159],{"class":73},[63,4110,174],{"class":73},[63,4112,354],{"class":73},[63,4114,4115],{"class":65,"line":101},[63,4116,359],{"class":80},[63,4118,4119],{"class":65,"line":114},[63,4120,364],{"class":80},[63,4122,4123,4125,4127,4129],{"class":65,"line":120},[63,4124,70],{"class":69},[63,4126,371],{"class":73},[63,4128,374],{"class":137},[63,4130,377],{"class":73},[63,4132,4133],{"class":65,"line":126},[63,4134,382],{"class":80},[63,4136,4137,4139,4141,4143],{"class":65,"line":134},[63,4138,70],{"class":69},[63,4140,389],{"class":73},[63,4142,392],{"class":73},[63,4144,377],{"class":73},[63,4146,4147],{"class":65,"line":397},[63,4148,400],{"class":80},[63,4150,4151,4153,4155,4157,4159],{"class":65,"line":403},[63,4152,406],{"class":69},[63,4154,409],{"class":137},[63,4156,413],{"class":412},[63,4158,416],{"class":69},[63,4160,377],{"class":73},[63,4162,4163],{"class":65,"line":421},[63,4164,424],{"class":80},[63,4166,4167,4169,4171],{"class":65,"line":427},[63,4168,70],{"class":69},[63,4170,432],{"class":73},[63,4172,435],{"class":73},[22,4174,4175],{},[25,4176],{"alt":58,"src":440},[22,4178,443],{},[22,4180,446],{},[22,4182,449,4183,453],{},[60,4184,452],{},[53,4186,4187],{"className":55,"code":456,"language":57,"meta":58,"style":58},[60,4188,4189,4193,4201,4209],{"__ignoreMap":58},[63,4190,4191],{"class":65,"line":66},[63,4192,463],{"class":80},[63,4194,4195,4197,4199],{"class":65,"line":77},[63,4196,70],{"class":69},[63,4198,470],{"class":73},[63,4200,473],{"class":73},[63,4202,4203,4205,4207],{"class":65,"line":84},[63,4204,70],{"class":69},[63,4206,480],{"class":73},[63,4208,483],{"class":73},[63,4210,4211],{"class":65,"line":95},[63,4212,488],{"class":80},[22,4214,491],{},[53,4216,4217],{"className":55,"code":494,"language":57,"meta":58,"style":58},[60,4218,4219,4223,4231,4235,4247,4257,4261,4283,4303,4307,4311,4315,4323,4333,4337,4355,4359,4363,4367,4389,4409,4437,4461,4471,4485,4489,4499,4515,4519,4537,4543,4555,4569],{"__ignoreMap":58},[63,4220,4221],{"class":65,"line":66},[63,4222,501],{"class":80},[63,4224,4225,4227,4229],{"class":65,"line":77},[63,4226,70],{"class":69},[63,4228,432],{"class":73},[63,4230,510],{"class":73},[63,4232,4233],{"class":65,"line":84},[63,4234,515],{"class":80},[63,4236,4237,4239,4241,4243,4245],{"class":65,"line":95},[63,4238,520],{"class":69},[63,4240,523],{"class":73},[63,4242,526],{"class":73},[63,4244,529],{"class":73},[63,4246,532],{"class":73},[63,4248,4249,4251,4253,4255],{"class":65,"line":101},[63,4250,537],{"class":69},[63,4252,540],{"class":73},[63,4254,543],{"class":73},[63,4256,546],{"class":80},[63,4258,4259],{"class":65,"line":114},[63,4260,552],{"emptyLinePlaceholder":551},[63,4262,4263,4265,4267,4269,4271,4273,4275,4277,4279,4281],{"class":65,"line":120},[63,4264,557],{"class":69},[63,4266,560],{"class":73},[63,4268,563],{"class":73},[63,4270,566],{"class":73},[63,4272,569],{"class":73},[63,4274,572],{"class":73},[63,4276,575],{"class":73},[63,4278,578],{"class":73},[63,4280,581],{"class":73},[63,4282,165],{"class":110},[63,4284,4285,4287,4289,4291,4293,4295,4297,4299,4301],{"class":65,"line":126},[63,4286,588],{"class":69},[63,4288,591],{"class":137},[63,4290,594],{"class":73},[63,4292,597],{"class":73},[63,4294,600],{"class":73},[63,4296,603],{"class":73},[63,4298,606],{"class":137},[63,4300,609],{"class":137},[63,4302,612],{"class":73},[63,4304,4305],{"class":65,"line":134},[63,4306,617],{"class":69},[63,4308,4309],{"class":65,"line":397},[63,4310,552],{"emptyLinePlaceholder":551},[63,4312,4313],{"class":65,"line":403},[63,4314,626],{"class":80},[63,4316,4317,4319,4321],{"class":65,"line":421},[63,4318,631],{"class":137},[63,4320,634],{"class":137},[63,4322,637],{"class":137},[63,4324,4325,4327,4329,4331],{"class":65,"line":427},[63,4326,537],{"class":69},[63,4328,540],{"class":73},[63,4330,543],{"class":73},[63,4332,648],{"class":80},[63,4334,4335],{"class":65,"line":651},[63,4336,654],{"class":80},[63,4338,4339,4341,4343,4345,4347,4349,4351,4353],{"class":65,"line":657},[63,4340,70],{"class":69},[63,4342,389],{"class":73},[63,4344,664],{"class":137},[63,4346,667],{"class":73},[63,4348,670],{"class":137},[63,4350,673],{"class":73},[63,4352,392],{"class":73},[63,4354,678],{"class":73},[63,4356,4357],{"class":65,"line":681},[63,4358,684],{"class":69},[63,4360,4361],{"class":65,"line":687},[63,4362,552],{"emptyLinePlaceholder":551},[63,4364,4365],{"class":65,"line":692},[63,4366,695],{"class":80},[63,4368,4369,4371,4373,4375,4377,4379,4381,4383,4385,4387],{"class":65,"line":698},[63,4370,701],{"class":69},[63,4372,704],{"class":73},[63,4374,707],{"class":73},[63,4376,710],{"class":73},[63,4378,713],{"class":73},[63,4380,716],{"class":73},[63,4382,719],{"class":73},[63,4384,722],{"class":110},[63,4386,725],{"class":137},[63,4388,728],{"class":110},[63,4390,4391,4393,4395,4397,4399,4401,4403,4405,4407],{"class":65,"line":731},[63,4392,734],{"class":69},[63,4394,737],{"class":73},[63,4396,740],{"class":73},[63,4398,743],{"class":73},[63,4400,746],{"class":73},[63,4402,749],{"class":73},[63,4404,752],{"class":73},[63,4406,755],{"class":73},[63,4408,165],{"class":110},[63,4410,4411,4413,4415,4417,4419,4421,4423,4425,4427,4429,4431,4433,4435],{"class":65,"line":760},[63,4412,763],{"class":69},[63,4414,766],{"class":73},[63,4416,752],{"class":73},[63,4418,771],{"class":73},[63,4420,389],{"class":73},[63,4422,776],{"class":73},[63,4424,779],{"class":73},[63,4426,782],{"class":73},[63,4428,785],{"class":73},[63,4430,529],{"class":73},[63,4432,740],{"class":73},[63,4434,710],{"class":73},[63,4436,165],{"class":110},[63,4438,4439,4441,4443,4445,4447,4449,4451,4453,4455,4457,4459],{"class":65,"line":796},[63,4440,799],{"class":69},[63,4442,802],{"class":73},[63,4444,805],{"class":73},[63,4446,808],{"class":73},[63,4448,811],{"class":73},[63,4450,814],{"class":73},[63,4452,743],{"class":73},[63,4454,819],{"class":73},[63,4456,822],{"class":110},[63,4458,825],{"class":73},[63,4460,165],{"class":110},[63,4462,4463,4465,4467,4469],{"class":65,"line":830},[63,4464,833],{"class":69},[63,4466,836],{"class":73},[63,4468,839],{"class":73},[63,4470,842],{"class":110},[63,4472,4473,4475,4477,4479,4481,4483],{"class":65,"line":845},[63,4474,848],{"class":69},[63,4476,851],{"class":73},[63,4478,389],{"class":73},[63,4480,856],{"class":73},[63,4482,859],{"class":73},[63,4484,862],{"class":73},[63,4486,4487],{"class":65,"line":865},[63,4488,552],{"emptyLinePlaceholder":551},[63,4490,4491,4493,4495,4497],{"class":65,"line":870},[63,4492,70],{"class":69},[63,4494,335],{"class":73},[63,4496,392],{"class":73},[63,4498,879],{"class":80},[63,4500,4501,4503,4505,4507,4509,4511,4513],{"class":65,"line":882},[63,4502,885],{"class":69},[63,4504,785],{"class":73},[63,4506,392],{"class":73},[63,4508,892],{"class":73},[63,4510,895],{"class":73},[63,4512,898],{"class":73},[63,4514,901],{"class":80},[63,4516,4517],{"class":65,"line":904},[63,4518,552],{"emptyLinePlaceholder":551},[63,4520,4521,4523,4525,4527,4529,4531,4533,4535],{"class":65,"line":909},[63,4522,70],{"class":69},[63,4524,389],{"class":73},[63,4526,664],{"class":137},[63,4528,667],{"class":73},[63,4530,670],{"class":137},[63,4532,673],{"class":73},[63,4534,392],{"class":73},[63,4536,678],{"class":73},[63,4538,4539,4541],{"class":65,"line":928},[63,4540,931],{"class":69},[63,4542,934],{"class":80},[63,4544,4545,4547,4549,4551,4553],{"class":65,"line":937},[63,4546,940],{"class":69},[63,4548,413],{"class":412},[63,4550,416],{"class":69},[63,4552,947],{"class":73},[63,4554,950],{"class":80},[63,4556,4557,4559,4561,4563,4565,4567],{"class":65,"line":953},[63,4558,956],{"class":69},[63,4560,959],{"class":73},[63,4562,543],{"class":73},[63,4564,964],{"class":73},[63,4566,967],{"class":73},[63,4568,970],{"class":110},[63,4570,4571,4573,4575,4577],{"class":65,"line":973},[63,4572,976],{"class":69},[63,4574,979],{"class":73},[63,4576,982],{"class":110},[63,4578,985],{"class":80},[17,4580,989],{"id":988},[53,4582,4583],{"className":55,"code":992,"language":57,"meta":58,"style":58},[60,4584,4585,4593,4597],{"__ignoreMap":58},[63,4586,4587,4589,4591],{"class":65,"line":66},[63,4588,70],{"class":69},[63,4590,1001],{"class":73},[63,4592,1004],{"class":73},[63,4594,4595],{"class":65,"line":77},[63,4596,1009],{"class":80},[63,4598,4599],{"class":65,"line":84},[63,4600,1014],{"class":80},[22,4602,4603],{},[25,4604],{"alt":58,"src":1019},[22,4606,4607],{},[25,4608],{"alt":58,"src":1024},[22,4610,1027],{},[17,4612,4613],{"id":1030},[14,4614,1033],{},[1035,4616,4617],{"id":1037},[14,4618,1040],{},[22,4620,1043],{},[1035,4622,4623],{"id":1046},[14,4624,1049],{},[22,4626,4627],{},[14,4628,1054],{},[22,4630,1057],{},[22,4632,1060],{},[22,4634,4635],{},[60,4636,1065],{},[10,4638,1069],{"id":1068},[17,4640,1073],{"id":1072},[22,4642,4643],{},[235,4644,1080],{"href":1078,"rel":4645},[239],[17,4647,1084],{"id":1083},[22,4649,4650],{},[235,4651,1091],{"href":1089,"rel":4652},[239],[17,4654,1095],{"id":1094},[22,4656,4657],{},[25,4658],{"alt":1100,"src":1101},[53,4660,4661],{"className":55,"code":1104,"language":57,"meta":58,"style":58},[60,4662,4663,4667,4681,4689,4695,4699,4705,4709,4721],{"__ignoreMap":58},[63,4664,4665],{"class":65,"line":66},[63,4666,1111],{"class":80},[63,4668,4669,4671,4673,4675,4677,4679],{"class":65,"line":77},[63,4670,70],{"class":69},[63,4672,1118],{"class":73},[63,4674,174],{"class":73},[63,4676,1123],{"class":73},[63,4678,1126],{"class":73},[63,4680,1129],{"class":137},[63,4682,4683,4685,4687],{"class":65,"line":84},[63,4684,1134],{"class":110},[63,4686,1137],{"class":73},[63,4688,1129],{"class":137},[63,4690,4691,4693],{"class":65,"line":95},[63,4692,1144],{"class":110},[63,4694,1147],{"class":73},[63,4696,4697],{"class":65,"line":101},[63,4698,1152],{"class":80},[63,4700,4701,4703],{"class":65,"line":114},[63,4702,1157],{"class":69},[63,4704,1160],{"class":137},[63,4706,4707],{"class":65,"line":120},[63,4708,1165],{"class":80},[63,4710,4711,4713,4715,4717,4719],{"class":65,"line":126},[63,4712,1170],{"class":69},[63,4714,1173],{"class":73},[63,4716,413],{"class":412},[63,4718,1178],{"class":69},[63,4720,313],{"class":137},[63,4722,4723],{"class":65,"line":134},[63,4724,1185],{"class":80},[22,4726,4727],{},[25,4728],{"alt":1190,"src":1191},[22,4730,1194],{},[17,4732,1198],{"id":1197},[22,4734,4735],{},[25,4736],{"alt":1203,"src":1204},[10,4738,1207],{"id":1207},[17,4740,1211],{"id":1210},[53,4742,4743],{"className":55,"code":1214,"language":57,"meta":58,"style":58},[60,4744,4745,4753,4761,4783,4805,4827,4849,4871,4893,4897,4913,4931,4939,4947,4969,4991,5013,5035,5057],{"__ignoreMap":58},[63,4746,4747,4749,4751],{"class":65,"line":66},[63,4748,1221],{"class":69},[63,4750,1224],{"class":137},[63,4752,1227],{"class":80},[63,4754,4755,4757,4759],{"class":65,"line":77},[63,4756,1232],{"class":69},[63,4758,1235],{"class":137},[63,4760,165],{"class":110},[63,4762,4763,4765,4767,4769,4771,4773,4775,4777,4779,4781],{"class":65,"line":84},[63,4764,1242],{"class":69},[63,4766,1245],{"class":137},[63,4768,1248],{"class":73},[63,4770,1248],{"class":73},[63,4772,1253],{"class":137},[63,4774,1256],{"class":73},[63,4776,1259],{"class":137},[63,4778,1262],{"class":73},[63,4780,1265],{"class":73},[63,4782,165],{"class":110},[63,4784,4785,4787,4789,4791,4793,4795,4797,4799,4801,4803],{"class":65,"line":95},[63,4786,1242],{"class":69},[63,4788,1274],{"class":137},[63,4790,1248],{"class":73},[63,4792,1248],{"class":73},[63,4794,1253],{"class":137},[63,4796,1256],{"class":73},[63,4798,1259],{"class":137},[63,4800,1262],{"class":73},[63,4802,1289],{"class":73},[63,4804,165],{"class":110},[63,4806,4807,4809,4811,4813,4815,4817,4819,4821,4823,4825],{"class":65,"line":101},[63,4808,1242],{"class":69},[63,4810,1245],{"class":137},[63,4812,1248],{"class":73},[63,4814,1248],{"class":73},[63,4816,1253],{"class":137},[63,4818,1256],{"class":73},[63,4820,1259],{"class":137},[63,4822,1262],{"class":73},[63,4824,1312],{"class":73},[63,4826,165],{"class":110},[63,4828,4829,4831,4833,4835,4837,4839,4841,4843,4845,4847],{"class":65,"line":114},[63,4830,1242],{"class":69},[63,4832,1274],{"class":137},[63,4834,1248],{"class":73},[63,4836,1248],{"class":73},[63,4838,1253],{"class":137},[63,4840,1256],{"class":73},[63,4842,1259],{"class":137},[63,4844,1262],{"class":73},[63,4846,1335],{"class":73},[63,4848,165],{"class":110},[63,4850,4851,4853,4855,4857,4859,4861,4863,4865,4867,4869],{"class":65,"line":120},[63,4852,1242],{"class":69},[63,4854,1245],{"class":137},[63,4856,1248],{"class":73},[63,4858,1248],{"class":73},[63,4860,1253],{"class":137},[63,4862,1256],{"class":73},[63,4864,1259],{"class":137},[63,4866,1262],{"class":73},[63,4868,1358],{"class":73},[63,4870,165],{"class":110},[63,4872,4873,4875,4877,4879,4881,4883,4885,4887,4889,4891],{"class":65,"line":126},[63,4874,1365],{"class":69},[63,4876,1245],{"class":137},[63,4878,1370],{"class":73},[63,4880,1373],{"class":73},[63,4882,606],{"class":137},[63,4884,1256],{"class":73},[63,4886,1380],{"class":137},[63,4888,1383],{"class":73},[63,4890,1386],{"class":73},[63,4892,165],{"class":110},[63,4894,4895],{"class":65,"line":134},[63,4896,552],{"emptyLinePlaceholder":551},[63,4898,4899,4901,4903,4905,4907,4909,4911],{"class":65,"line":397},[63,4900,70],{"class":69},[63,4902,1399],{"class":73},[63,4904,1402],{"class":110},[63,4906,1405],{"class":73},[63,4908,1408],{"class":110},[63,4910,1411],{"class":73},[63,4912,1414],{"class":80},[63,4914,4915,4917,4919,4921,4923,4925,4927,4929],{"class":65,"line":403},[63,4916,70],{"class":69},[63,4918,1399],{"class":73},[63,4920,1423],{"class":137},[63,4922,1402],{"class":110},[63,4924,1405],{"class":73},[63,4926,1408],{"class":110},[63,4928,1432],{"class":73},[63,4930,1435],{"class":80},[63,4932,4933,4935,4937],{"class":65,"line":421},[63,4934,1221],{"class":69},[63,4936,1224],{"class":137},[63,4938,165],{"class":110},[63,4940,4941,4943,4945],{"class":65,"line":427},[63,4942,1232],{"class":69},[63,4944,1235],{"class":137},[63,4946,165],{"class":110},[63,4948,4949,4951,4953,4955,4957,4959,4961,4963,4965,4967],{"class":65,"line":651},[63,4950,1242],{"class":69},[63,4952,1245],{"class":137},[63,4954,1248],{"class":73},[63,4956,1248],{"class":73},[63,4958,1253],{"class":137},[63,4960,1256],{"class":73},[63,4962,1259],{"class":137},[63,4964,1262],{"class":73},[63,4966,1265],{"class":73},[63,4968,165],{"class":110},[63,4970,4971,4973,4975,4977,4979,4981,4983,4985,4987,4989],{"class":65,"line":657},[63,4972,1242],{"class":69},[63,4974,1274],{"class":137},[63,4976,1248],{"class":73},[63,4978,1248],{"class":73},[63,4980,1253],{"class":137},[63,4982,1256],{"class":73},[63,4984,1259],{"class":137},[63,4986,1262],{"class":73},[63,4988,1289],{"class":73},[63,4990,165],{"class":110},[63,4992,4993,4995,4997,4999,5001,5003,5005,5007,5009,5011],{"class":65,"line":681},[63,4994,1242],{"class":69},[63,4996,1245],{"class":137},[63,4998,1248],{"class":73},[63,5000,1248],{"class":73},[63,5002,1253],{"class":137},[63,5004,1256],{"class":73},[63,5006,1259],{"class":137},[63,5008,1262],{"class":73},[63,5010,1312],{"class":73},[63,5012,165],{"class":110},[63,5014,5015,5017,5019,5021,5023,5025,5027,5029,5031,5033],{"class":65,"line":687},[63,5016,1242],{"class":69},[63,5018,1274],{"class":137},[63,5020,1248],{"class":73},[63,5022,1248],{"class":73},[63,5024,1253],{"class":137},[63,5026,1256],{"class":73},[63,5028,1259],{"class":137},[63,5030,1262],{"class":73},[63,5032,1335],{"class":73},[63,5034,165],{"class":110},[63,5036,5037,5039,5041,5043,5045,5047,5049,5051,5053,5055],{"class":65,"line":692},[63,5038,1242],{"class":69},[63,5040,1245],{"class":137},[63,5042,1248],{"class":73},[63,5044,1248],{"class":73},[63,5046,1253],{"class":137},[63,5048,1256],{"class":73},[63,5050,1259],{"class":137},[63,5052,1262],{"class":73},[63,5054,1358],{"class":73},[63,5056,165],{"class":110},[63,5058,5059,5061,5063,5065,5067,5069,5071,5073,5075],{"class":65,"line":698},[63,5060,1365],{"class":69},[63,5062,1245],{"class":137},[63,5064,1248],{"class":73},[63,5066,1248],{"class":73},[63,5068,1253],{"class":137},[63,5070,1256],{"class":73},[63,5072,1380],{"class":137},[63,5074,1383],{"class":73},[63,5076,1582],{"class":73},[17,5078,1586],{"id":1585},[53,5080,5081],{"className":55,"code":1589,"language":57,"meta":58,"style":58},[60,5082,5083,5089,5095,5101],{"__ignoreMap":58},[63,5084,5085,5087],{"class":65,"line":66},[63,5086,1596],{"class":137},[63,5088,1599],{"class":73},[63,5090,5091,5093],{"class":65,"line":77},[63,5092,1604],{"class":69},[63,5094,1607],{"class":73},[63,5096,5097,5099],{"class":65,"line":84},[63,5098,1612],{"class":69},[63,5100,1607],{"class":73},[63,5102,5103,5105,5107,5109],{"class":65,"line":95},[63,5104,70],{"class":69},[63,5106,1621],{"class":73},[63,5108,198],{"class":73},[63,5110,1607],{"class":73},[53,5112,5113],{"className":55,"code":1628,"language":57,"meta":58,"style":58},[60,5114,5115,5119,5127,5135,5143,5151,5169],{"__ignoreMap":58},[63,5116,5117],{"class":65,"line":66},[63,5118,1635],{"class":110},[63,5120,5121,5123,5125],{"class":65,"line":77},[63,5122,1640],{"class":110},[63,5124,1643],{"class":412},[63,5126,1646],{"class":73},[63,5128,5129,5131,5133],{"class":65,"line":84},[63,5130,1651],{"class":110},[63,5132,1643],{"class":412},[63,5134,1656],{"class":73},[63,5136,5137,5139,5141],{"class":65,"line":95},[63,5138,1661],{"class":110},[63,5140,1643],{"class":412},[63,5142,1666],{"class":73},[63,5144,5145,5147,5149],{"class":65,"line":101},[63,5146,1671],{"class":110},[63,5148,1643],{"class":412},[63,5150,1676],{"class":73},[63,5152,5153,5155,5157,5159,5161,5163,5165,5167],{"class":65,"line":114},[63,5154,1681],{"class":110},[63,5156,1643],{"class":412},[63,5158,1686],{"class":73},[63,5160,1689],{"class":110},[63,5162,1692],{"class":69},[63,5164,1689],{"class":110},[63,5166,1697],{"class":69},[63,5168,1700],{"class":110},[63,5170,5171,5173,5175,5177,5179,5181,5183],{"class":65,"line":120},[63,5172,1705],{"class":110},[63,5174,1643],{"class":412},[63,5176,1710],{"class":73},[63,5178,1713],{"class":69},[63,5180,1716],{"class":73},[63,5182,1719],{"class":73},[63,5184,1722],{"class":73},[53,5186,5187],{"className":55,"code":1725,"language":57,"meta":58,"style":58},[60,5188,5189,5193,5197,5201,5205,5209,5213],{"__ignoreMap":58},[63,5190,5191],{"class":65,"line":66},[63,5192,1732],{"class":69},[63,5194,5195],{"class":65,"line":77},[63,5196,1737],{"class":69},[63,5198,5199],{"class":65,"line":84},[63,5200,1742],{"class":69},[63,5202,5203],{"class":65,"line":95},[63,5204,1747],{"class":69},[63,5206,5207],{"class":65,"line":101},[63,5208,1752],{"class":69},[63,5210,5211],{"class":65,"line":114},[63,5212,1757],{"class":69},[63,5214,5215],{"class":65,"line":120},[63,5216,1762],{"class":69},[10,5218,1766],{"id":1765},[17,5220,1770],{"id":1769},[1035,5222,1774],{"id":1773},[1776,5224,5225],{},[1779,5226,1781,5227],{},[235,5228,1786],{"href":1784,"rel":5229},[239],[22,5231,1789],{},[22,5233,5234],{},[25,5235],{"alt":1794,"src":1795},[1776,5237,5238],{"start":77},[1779,5239,1800],{},[22,5241,1803],{},[53,5243,5244],{"className":1806,"code":1807,"language":1808,"meta":58,"style":58},[60,5245,5246,5252,5256,5260],{"__ignoreMap":58},[63,5247,5248,5250],{"class":65,"line":66},[63,5249,1612],{"class":69},[63,5251,1817],{"class":73},[63,5253,5254],{"class":65,"line":77},[63,5255,552],{"emptyLinePlaceholder":551},[63,5257,5258],{"class":65,"line":84},[63,5259,1826],{"class":80},[63,5261,5262,5264,5266,5268,5270],{"class":65,"line":95},[63,5263,1786],{"class":69},[63,5265,1833],{"class":73},[63,5267,1836],{"class":73},[63,5269,413],{"class":412},[63,5271,1841],{"class":137},[22,5273,1057],{},[53,5275,5276],{"className":55,"code":1846,"language":57,"meta":58,"style":58},[60,5277,5278,5286,5290],{"__ignoreMap":58},[63,5279,5280,5282,5284],{"class":65,"line":66},[63,5281,1612],{"class":69},[63,5283,1855],{"class":73},[63,5285,165],{"class":110},[63,5287,5288],{"class":65,"line":77},[63,5289,552],{"emptyLinePlaceholder":551},[63,5291,5292,5294,5296,5298],{"class":65,"line":84},[63,5293,1866],{"class":137},[63,5295,1869],{"class":73},[63,5297,1786],{"class":69},[63,5299,1874],{"class":73},[17,5301,1878],{"id":1877},[22,5303,5304],{},[235,5305,1885],{"href":1883,"rel":5306},[239],[17,5308,1889],{"id":1888},[1035,5310,1893],{"id":1892},[1895,5312,5313,5317],{},[1779,5314,1899,5315],{},[60,5316,1902],{},[1779,5318,1905],{},[53,5320,5321],{"className":1908,"code":1909,"language":1057,"meta":58,"style":58},[60,5322,5323,5327,5337,5341,5351,5361,5365,5375,5379,5387],{"__ignoreMap":58},[63,5324,5325],{"class":65,"line":66},[63,5326,1916],{"class":80},[63,5328,5329,5331,5333,5335],{"class":65,"line":77},[63,5330,70],{"class":69},[63,5332,1118],{"class":73},[63,5334,174],{"class":73},[63,5336,1927],{"class":73},[63,5338,5339],{"class":65,"line":84},[63,5340,1932],{"class":80},[63,5342,5343,5345,5347,5349],{"class":65,"line":95},[63,5344,1937],{"class":69},[63,5346,1940],{"class":137},[63,5348,1943],{"class":73},[63,5350,1946],{"class":73},[63,5352,5353,5355,5357,5359],{"class":65,"line":101},[63,5354,1937],{"class":69},[63,5356,1940],{"class":137},[63,5358,1943],{"class":73},[63,5360,1927],{"class":73},[63,5362,5363],{"class":65,"line":114},[63,5364,1961],{"class":80},[63,5366,5367,5369,5371,5373],{"class":65,"line":120},[63,5368,1937],{"class":69},[63,5370,1940],{"class":137},[63,5372,1970],{"class":73},[63,5374,1927],{"class":73},[63,5376,5377],{"class":65,"line":126},[63,5378,1977],{"class":80},[63,5380,5381,5383,5385],{"class":65,"line":134},[63,5382,1982],{"class":69},[63,5384,1985],{"class":73},[63,5386,1988],{"class":73},[63,5388,5389],{"class":65,"line":397},[63,5390,1993],{"class":80},[1995,5392,1997],{},{"title":58,"searchDepth":95,"depth":95,"links":5394},[5395,5410,5416,5420],{"id":12,"depth":77,"text":12,"children":5396},[5397,5398,5399,5400,5401,5402,5403,5404,5405,5406],{"id":19,"depth":84,"text":20},{"id":43,"depth":84,"text":44},{"id":50,"depth":84,"text":51},{"id":141,"depth":84,"text":142},{"id":219,"depth":84,"text":220},{"id":229,"depth":84,"text":230},{"id":242,"depth":84,"text":243},{"id":292,"depth":84,"text":293},{"id":988,"depth":84,"text":989},{"id":1030,"depth":84,"text":1033,"children":5407},[5408,5409],{"id":1037,"depth":95,"text":1040},{"id":1046,"depth":95,"text":1049},{"id":1068,"depth":77,"text":1069,"children":5411},[5412,5413,5414,5415],{"id":1072,"depth":84,"text":1073},{"id":1083,"depth":84,"text":1084},{"id":1094,"depth":84,"text":1095},{"id":1197,"depth":84,"text":1198},{"id":1207,"depth":77,"text":1207,"children":5417},[5418,5419],{"id":1210,"depth":84,"text":1211},{"id":1585,"depth":84,"text":1586},{"id":1765,"depth":77,"text":1766,"children":5421},[5422,5425,5426],{"id":1769,"depth":84,"text":1770,"children":5423},[5424],{"id":1773,"depth":95,"text":1774},{"id":1877,"depth":84,"text":1878},{"id":1888,"depth":84,"text":1889,"children":5427},[5428],{"id":1892,"depth":95,"text":1893},{},{"title":5,"description":2036},[2034],{"id":5433,"title":5434,"body":5435,"category":9418,"date":3697,"description":9419,"draft":2037,"extension":2038,"featured":2037,"meta":9420,"navigation":551,"path":9421,"seo":9422,"stem":9423,"tags":9424,"type":2044,"__hash__":9425},"content\u002Fwiki\u002Frobotics\u002Fmujoco\u002Fmujoco-28267cc.md","Mujoco学习记录",{"type":7,"value":5436,"toc":9397},[5437,5445,5453,5461,5465,5470,5553,5557,5570,5790,5793,5841,5849,5856,5862,5941,5944,5962,5966,5969,6049,6052,6137,6158,6162,6166,6183,6218,6222,6226,6230,6233,6259,6263,6447,6452,8053,8058,8783,8787,8810,9067,9072,9162,9171,9321,9324,9328,9331,9339,9394],[22,5438,5439,5440],{},"📖参考资料：\nMujoco官网：",[235,5441,5444],{"href":5442,"rel":5443},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[239],"MuJoCo 官方文档",[22,5446,5447,5448],{},"学习连接: ",[235,5449,5452],{"href":5450,"rel":5451},"https:\u002F\u002Fgithub.com\u002FAlbusgive\u002Fmujoco_learning\u002Ftree\u002Fmain",[239],"MuJoCo 学习参考",[22,5454,5455,5456],{},"学习视频链接",[235,5457,5460],{"href":5458,"rel":5459},"https:\u002F\u002Fwww.bilibili.com\u002Fvideo\u002FBV1wMdHYVEnx?vd_source=6bb9dc8d77886fc937032b139ad7debc",[239],"【教程】2025新版mujoco建模与仿真",[10,5462,5464],{"id":5463},"一环境安装","一、环境安装",[22,5466,5467,2232],{},[14,5468,5469],{},"MuJoCo 常见有三种安装方式，按使用场景选择即可",[2273,5471,5472,5488],{},[2276,5473,5474],{},[2279,5475,5476,5479,5482,5485],{},[2282,5477,5478],{},"安装方式",[2282,5480,5481],{},"优点",[2282,5483,5484],{},"缺点",[2282,5486,5487],{},"适合场景",[2293,5489,5490,5511,5529,5543],{},[2279,5491,5492,5495,5505,5508],{},[2298,5493,5494],{},"官方 Release 二进制",[2298,5496,5497,5498,3667,5501,5504],{},"安装简单，包含 ",[60,5499,5500],{},"simulate",[60,5502,5503],{},"compile"," 等工具，适合 C\u002FC++ 开发",[2298,5506,5507],{},"需要手动配置环境变量；平台和架构必须匹配",[2298,5509,5510],{},"使用官方示例、C\u002FC++、命令行工具",[2279,5512,5513,5520,5523,5526],{},[2298,5514,5515,5516,5519],{},"Python ",[60,5517,5518],{},"pip"," 包",[2298,5521,5522],{},"安装最快，自动携带 MuJoCo 动态库；便于与 Gymnasium、强化学习库结合",[2298,5524,5525],{},"不提供完整的源码和桌面工具；主要面向 Python",[2298,5527,5528],{},"Python 仿真、强化学习、快速验证",[2279,5530,5531,5534,5537,5540],{},[2298,5532,5533],{},"源码编译",[2298,5535,5536],{},"可修改源码、启用调试和自定义编译选项",[2298,5538,5539],{},"编译时间长，依赖多，维护成本高",[2298,5541,5542],{},"修改 MuJoCo 内核、底层开发、贡献代码",[2279,5544,5545,5547,5549,5551],{},[2298,5546],{},[2298,5548],{},[2298,5550],{},[2298,5552],{},[17,5554,5556],{"id":5555},"_11-下载官方release版本","1.1 下载官方Release版本",[22,5558,5559,5560,5565,5566],{},"MuJoCo 的官方二进制 Release 可从 ",[235,5561,5564],{"href":5562,"rel":5563},"https:\u002F\u002Fgithub.com\u002Fgoogle-deepmind\u002Fmujoco\u002Freleases",[239],"GitHub Releases"," 下载。以下以 Linux x86_64 为例（版本号请替换为 Release 页面中的最新版本）：\n",[25,5567],{"alt":5568,"src":5569},"633","\u002Ffongtszho.web\u002Fwiki-assets\u002Fpictures-1786633819387106425.png",[53,5571,5573],{"className":1908,"code":5572,"language":1057,"meta":58,"style":58},"# Ubuntu\u002FDebian 依赖\nsudo apt update\nsudo apt install -y libglfw3 libglew2.2 libosmesa6 libxrandr2 libxinerama1 libxcursor1\n\n# Fedora 依赖（与上面的 apt 命令二选一）\nsudo dnf install -y glfw glew libglvnd-glx mesa-libOSMesa libXrandr libXinerama libXcursor\n\n# 下载并解压官方 Release\ncd ~\u002FApplications\nwget https:\u002F\u002Fgithub.com\u002Fgoogle-deepmind\u002Fmujoco\u002Freleases\u002Fdownload\u002F3.7.0\u002Fmujoco-3.7.0-linux-x86_64.tar.gz\ntar -xzf mujoco-3.7.0-linux-x86_64.tar.gz\n\n# 配置环境变量（也可将下面三行写入 ~\u002F.bashrc）\nexport MUJOCO_HOME=\"$HOME\u002FApplications\u002Fmujoco-3.7.0\"\nexport PATH=\"$MUJOCO_HOME\u002Fbin:$PATH\"\nexport LD_LIBRARY_PATH=\"$MUJOCO_HOME\u002Fbin:${LD_LIBRARY_PATH:-}\"\n\n# 4. 验证安装：查看版本并启动官方模拟器\ncompile -h\nsimulate\n",[60,5574,5575,5580,5589,5618,5622,5627,5658,5662,5667,5674,5682,5693,5697,5702,5721,5744,5769,5773,5778,5785],{"__ignoreMap":58},[63,5576,5577],{"class":65,"line":66},[63,5578,5579],{"class":80},"# Ubuntu\u002FDebian 依赖\n",[63,5581,5582,5584,5586],{"class":65,"line":77},[63,5583,70],{"class":69},[63,5585,159],{"class":73},[63,5587,5588],{"class":73}," update\n",[63,5590,5591,5593,5595,5597,5600,5603,5606,5609,5612,5615],{"class":65,"line":84},[63,5592,70],{"class":69},[63,5594,159],{"class":73},[63,5596,174],{"class":73},[63,5598,5599],{"class":137}," -y",[63,5601,5602],{"class":73}," libglfw3",[63,5604,5605],{"class":73}," libglew2.2",[63,5607,5608],{"class":73}," libosmesa6",[63,5610,5611],{"class":73}," libxrandr2",[63,5613,5614],{"class":73}," libxinerama1",[63,5616,5617],{"class":73}," libxcursor1\n",[63,5619,5620],{"class":65,"line":95},[63,5621,552],{"emptyLinePlaceholder":551},[63,5623,5624],{"class":65,"line":101},[63,5625,5626],{"class":80},"# Fedora 依赖（与上面的 apt 命令二选一）\n",[63,5628,5629,5631,5633,5635,5637,5640,5643,5646,5649,5652,5655],{"class":65,"line":114},[63,5630,70],{"class":69},[63,5632,1118],{"class":73},[63,5634,174],{"class":73},[63,5636,5599],{"class":137},[63,5638,5639],{"class":73}," glfw",[63,5641,5642],{"class":73}," glew",[63,5644,5645],{"class":73}," libglvnd-glx",[63,5647,5648],{"class":73}," mesa-libOSMesa",[63,5650,5651],{"class":73}," libXrandr",[63,5653,5654],{"class":73}," libXinerama",[63,5656,5657],{"class":73}," libXcursor\n",[63,5659,5660],{"class":65,"line":120},[63,5661,552],{"emptyLinePlaceholder":551},[63,5663,5664],{"class":65,"line":126},[63,5665,5666],{"class":80},"# 下载并解压官方 Release\n",[63,5668,5669,5671],{"class":65,"line":134},[63,5670,1596],{"class":137},[63,5672,5673],{"class":73}," ~\u002FApplications\n",[63,5675,5676,5679],{"class":65,"line":397},[63,5677,5678],{"class":69},"wget",[63,5680,5681],{"class":73}," https:\u002F\u002Fgithub.com\u002Fgoogle-deepmind\u002Fmujoco\u002Freleases\u002Fdownload\u002F3.7.0\u002Fmujoco-3.7.0-linux-x86_64.tar.gz\n",[63,5683,5684,5687,5690],{"class":65,"line":403},[63,5685,5686],{"class":69},"tar",[63,5688,5689],{"class":137}," -xzf",[63,5691,5692],{"class":73}," mujoco-3.7.0-linux-x86_64.tar.gz\n",[63,5694,5695],{"class":65,"line":421},[63,5696,552],{"emptyLinePlaceholder":551},[63,5698,5699],{"class":65,"line":427},[63,5700,5701],{"class":80},"# 配置环境变量（也可将下面三行写入 ~\u002F.bashrc）\n",[63,5703,5704,5707,5710,5712,5715,5718],{"class":65,"line":651},[63,5705,5706],{"class":412},"export",[63,5708,5709],{"class":110}," MUJOCO_HOME",[63,5711,1643],{"class":412},[63,5713,5714],{"class":73},"\"",[63,5716,5717],{"class":110},"$HOME",[63,5719,5720],{"class":73},"\u002FApplications\u002Fmujoco-3.7.0\"\n",[63,5722,5723,5725,5728,5730,5732,5735,5738,5741],{"class":65,"line":657},[63,5724,5706],{"class":412},[63,5726,5727],{"class":110}," PATH",[63,5729,1643],{"class":412},[63,5731,5714],{"class":73},[63,5733,5734],{"class":110},"$MUJOCO_HOME",[63,5736,5737],{"class":73},"\u002Fbin:",[63,5739,5740],{"class":110},"$PATH",[63,5742,5743],{"class":73},"\"\n",[63,5745,5746,5748,5751,5753,5755,5757,5760,5763,5766],{"class":65,"line":681},[63,5747,5706],{"class":412},[63,5749,5750],{"class":110}," LD_LIBRARY_PATH",[63,5752,1643],{"class":412},[63,5754,5714],{"class":73},[63,5756,5734],{"class":110},[63,5758,5759],{"class":73},"\u002Fbin:${",[63,5761,5762],{"class":110},"LD_LIBRARY_PATH",[63,5764,5765],{"class":412},":-",[63,5767,5768],{"class":73},"}\"\n",[63,5770,5771],{"class":65,"line":687},[63,5772,552],{"emptyLinePlaceholder":551},[63,5774,5775],{"class":65,"line":692},[63,5776,5777],{"class":80},"# 4. 验证安装：查看版本并启动官方模拟器\n",[63,5779,5780,5782],{"class":65,"line":698},[63,5781,5503],{"class":69},[63,5783,5784],{"class":137}," -h\n",[63,5786,5787],{"class":65,"line":731},[63,5788,5789],{"class":69},"simulate\n",[22,5791,5792],{},"如果希望每次打开终端都自动生效，将环境变量追加到 shell 配置文件：",[53,5794,5796],{"className":1908,"code":5795,"language":1057,"meta":58,"style":58},"cat >> ~\u002F.bashrc \u003C\u003C'EOF'\nexport MUJOCO_HOME=\"$HOME\u002FApplications\u002Fmujoco-3.7.0\"\nexport PATH=\"$MUJOCO_HOME\u002Fbin:$PATH\"\nexport LD_LIBRARY_PATH=\"$MUJOCO_HOME\u002Fbin:${LD_LIBRARY_PATH:-}\"\nEOF\nsource ~\u002F.bashrc\n",[60,5797,5798,5814,5819,5824,5829,5834],{"__ignoreMap":58},[63,5799,5800,5803,5806,5808,5811],{"class":65,"line":66},[63,5801,5802],{"class":69},"cat",[63,5804,5805],{"class":412}," >>",[63,5807,1855],{"class":73},[63,5809,5810],{"class":412}," \u003C\u003C",[63,5812,5813],{"class":73},"'EOF'\n",[63,5815,5816],{"class":65,"line":77},[63,5817,5818],{"class":73},"export MUJOCO_HOME=\"$HOME\u002FApplications\u002Fmujoco-3.7.0\"\n",[63,5820,5821],{"class":65,"line":84},[63,5822,5823],{"class":73},"export PATH=\"$MUJOCO_HOME\u002Fbin:$PATH\"\n",[63,5825,5826],{"class":65,"line":95},[63,5827,5828],{"class":73},"export LD_LIBRARY_PATH=\"$MUJOCO_HOME\u002Fbin:${LD_LIBRARY_PATH:-}\"\n",[63,5830,5831],{"class":65,"line":101},[63,5832,5833],{"class":73},"EOF\n",[63,5835,5836,5838],{"class":65,"line":114},[63,5837,2139],{"class":137},[63,5839,5840],{"class":73}," ~\u002F.bashrc\n",[22,5842,5843,5844,3667,5846,5848],{},"说明：Release 压缩包已经包含 MuJoCo 的运行库和 ",[60,5845,5500],{},[60,5847,5503],{}," 等工具，不需要再编译源码。若使用 ARM64、macOS 或 Windows，请在 Releases 页面选择对应平台的压缩包，并相应调整解压目录和动态库环境变量。",[17,5850,5852,5853,5855],{"id":5851},"_12-使用-python-pip-安装","1.2 使用 Python ",[60,5854,5518],{}," 安装",[22,5857,5858,5859,2232],{},"MuJoCo 官方 Python 绑定会自动下载并管理对应的 MuJoCo 二进制库，通常不需要手动设置 ",[60,5860,5861],{},"MUJOCO_HOME",[53,5863,5865],{"className":1908,"code":5864,"language":1057,"meta":58,"style":58},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate                 # Fedora\u002FUbuntu\npython -m pip install --upgrade pip\npython -m pip install mujoco\n\n# 验证\npython -c \"import mujoco; print(mujoco.__version__)\"\n",[60,5866,5867,5881,5891,5909,5922,5926,5931],{"__ignoreMap":58},[63,5868,5869,5872,5875,5878],{"class":65,"line":66},[63,5870,5871],{"class":69},"python3",[63,5873,5874],{"class":137}," -m",[63,5876,5877],{"class":73}," venv",[63,5879,5880],{"class":73}," .venv\n",[63,5882,5883,5885,5888],{"class":65,"line":77},[63,5884,2139],{"class":137},[63,5886,5887],{"class":73}," .venv\u002Fbin\u002Factivate",[63,5889,5890],{"class":80},"                 # Fedora\u002FUbuntu\n",[63,5892,5893,5896,5898,5901,5903,5906],{"class":65,"line":84},[63,5894,5895],{"class":69},"python",[63,5897,5874],{"class":137},[63,5899,5900],{"class":73}," pip",[63,5902,174],{"class":73},[63,5904,5905],{"class":137}," --upgrade",[63,5907,5908],{"class":73}," pip\n",[63,5910,5911,5913,5915,5917,5919],{"class":65,"line":95},[63,5912,5895],{"class":69},[63,5914,5874],{"class":137},[63,5916,5900],{"class":73},[63,5918,174],{"class":73},[63,5920,5921],{"class":73}," mujoco\n",[63,5923,5924],{"class":65,"line":101},[63,5925,552],{"emptyLinePlaceholder":551},[63,5927,5928],{"class":65,"line":114},[63,5929,5930],{"class":80},"# 验证\n",[63,5932,5933,5935,5938],{"class":65,"line":120},[63,5934,5895],{"class":69},[63,5936,5937],{"class":137}," -c",[63,5939,5940],{"class":73}," \"import mujoco; print(mujoco.__version__)\"\n",[22,5942,5943],{},"如果使用 Gymnasium 等强化学习环境，可一并安装：",[53,5945,5947],{"className":1908,"code":5946,"language":1057,"meta":58,"style":58},"python -m pip install \"gymnasium[mujoco]\"\n",[60,5948,5949],{"__ignoreMap":58},[63,5950,5951,5953,5955,5957,5959],{"class":65,"line":66},[63,5952,5895],{"class":69},[63,5954,5874],{"class":137},[63,5956,5900],{"class":73},[63,5958,174],{"class":73},[63,5960,5961],{"class":73}," \"gymnasium[mujoco]\"\n",[17,5963,5965],{"id":5964},"_13-从源码编译","1.3 从源码编译",[22,5967,5968],{},"源码编译适合需要修改 MuJoCo 内核或进行底层调试的场景。先安装 Git、CMake、C\u002FC++ 编译器及图形依赖：",[53,5970,5972],{"className":1908,"code":5971,"language":1057,"meta":58,"style":58},"# Ubuntu\u002FDebian\nsudo apt update\nsudo apt install -y git cmake build-essential libglfw3-dev libglew-dev libosmesa6-dev\n\n# Fedora\nsudo dnf install -y git cmake gcc-c++ glfw-devel glew-devel mesa-libOSMesa-devel\n",[60,5973,5974,5979,5987,6014,6018,6023],{"__ignoreMap":58},[63,5975,5976],{"class":65,"line":66},[63,5977,5978],{"class":80},"# Ubuntu\u002FDebian\n",[63,5980,5981,5983,5985],{"class":65,"line":77},[63,5982,70],{"class":69},[63,5984,159],{"class":73},[63,5986,5588],{"class":73},[63,5988,5989,5991,5993,5995,5997,6000,6003,6005,6008,6011],{"class":65,"line":84},[63,5990,70],{"class":69},[63,5992,159],{"class":73},[63,5994,174],{"class":73},[63,5996,5599],{"class":137},[63,5998,5999],{"class":73}," git",[63,6001,6002],{"class":73}," cmake",[63,6004,177],{"class":73},[63,6006,6007],{"class":73}," libglfw3-dev",[63,6009,6010],{"class":73}," libglew-dev",[63,6012,6013],{"class":73}," libosmesa6-dev\n",[63,6015,6016],{"class":65,"line":95},[63,6017,552],{"emptyLinePlaceholder":551},[63,6019,6020],{"class":65,"line":101},[63,6021,6022],{"class":80},"# Fedora\n",[63,6024,6025,6027,6029,6031,6033,6035,6037,6040,6043,6046],{"class":65,"line":114},[63,6026,70],{"class":69},[63,6028,1118],{"class":73},[63,6030,174],{"class":73},[63,6032,5599],{"class":137},[63,6034,5999],{"class":73},[63,6036,6002],{"class":73},[63,6038,6039],{"class":73}," gcc-c++",[63,6041,6042],{"class":73}," glfw-devel",[63,6044,6045],{"class":73}," glew-devel",[63,6047,6048],{"class":73}," mesa-libOSMesa-devel\n",[22,6050,6051],{},"然后从官方仓库编译：",[53,6053,6055],{"className":1908,"code":6054,"language":1057,"meta":58,"style":58},"git clone https:\u002F\u002Fgithub.com\u002Fgoogle-deepmind\u002Fmujoco.git\ncd mujoco\ncmake -S . -B build -DCMAKE_BUILD_TYPE=Release\ncmake --build build -j\"$(nproc)\"\n\n# 可选：运行测试\nctest --test-dir build --output-on-failure\n",[60,6056,6057,6068,6074,6094,6115,6119,6124],{"__ignoreMap":58},[63,6058,6059,6062,6065],{"class":65,"line":66},[63,6060,6061],{"class":69},"git",[63,6063,6064],{"class":73}," clone",[63,6066,6067],{"class":73}," https:\u002F\u002Fgithub.com\u002Fgoogle-deepmind\u002Fmujoco.git\n",[63,6069,6070,6072],{"class":65,"line":77},[63,6071,1596],{"class":137},[63,6073,5921],{"class":73},[63,6075,6076,6079,6082,6085,6088,6091],{"class":65,"line":84},[63,6077,6078],{"class":69},"cmake",[63,6080,6081],{"class":137}," -S",[63,6083,6084],{"class":73}," .",[63,6086,6087],{"class":137}," -B",[63,6089,6090],{"class":73}," build",[63,6092,6093],{"class":137}," -DCMAKE_BUILD_TYPE=Release\n",[63,6095,6096,6098,6101,6103,6106,6109,6112],{"class":65,"line":95},[63,6097,6078],{"class":69},[63,6099,6100],{"class":137}," --build",[63,6102,6090],{"class":73},[63,6104,6105],{"class":137}," -j",[63,6107,6108],{"class":73},"\"$(",[63,6110,6111],{"class":69},"nproc",[63,6113,6114],{"class":73},")\"\n",[63,6116,6117],{"class":65,"line":101},[63,6118,552],{"emptyLinePlaceholder":551},[63,6120,6121],{"class":65,"line":114},[63,6122,6123],{"class":80},"# 可选：运行测试\n",[63,6125,6126,6129,6132,6134],{"class":65,"line":120},[63,6127,6128],{"class":69},"ctest",[63,6130,6131],{"class":137}," --test-dir",[63,6133,6090],{"class":73},[63,6135,6136],{"class":137}," --output-on-failure\n",[22,6138,6139,6140,6143,6144,3667,6147,6150,6151,6154,6155,6157],{},"源码构建完成后，可将 ",[60,6141,6142],{},"build","（或安装后的 ",[60,6145,6146],{},"bin",[60,6148,6149],{},"lib"," 目录）加入 ",[60,6152,6153],{},"PATH"," 和 ",[60,6156,5762],{},"；具体目录以当前版本的 CMake 输出为准。",[10,6159,6161],{"id":6160},"二搭建机器人模型","二、搭建机器人模型",[17,6163,6165],{"id":6164},"_21-使用sw转urdfurdf转mjcf","2.1  使用SW转URDF,URDF转MJCF",[1895,6167,6168,6180],{},[1779,6169,6170,6171,6176],{},"SW ->URDF\n详情请见Vinvi战队ROS2教程",[235,6172,6175],{"href":6173,"rel":6174},"https:\u002F\u002Fwww.sdutvincirobot.top\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0900-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan#sw2urdf",[239],"ROS2机器人操作系统教程",[25,6177],{"alt":6178,"src":6179},"730","\u002Ffongtszho.web\u002Fwiki-assets\u002Fpictures-pasted-image-20260721235907.png",[1779,6181,6182],{},"URDF->MJCF",[53,6184,6186],{"className":1908,"code":6185,"language":1057,"meta":58,"style":58},"#调用\n\u002Fmujoco安装路径\u002Fbin\u002Fcompile \u002Fyou_URDF_file_path  \u002FMJCF_path\n#示例\n\u002Fhome\u002Fxiaofang\u002FApplications\u002Fmujoco-3.7.0\u002Fbin\u002Fcompile \u002Fyou_URDF_file_path  \u002FMJCF_path\n",[60,6187,6188,6193,6204,6209],{"__ignoreMap":58},[63,6189,6190],{"class":65,"line":66},[63,6191,6192],{"class":80},"#调用\n",[63,6194,6195,6198,6201],{"class":65,"line":77},[63,6196,6197],{"class":69},"\u002Fmujoco安装路径\u002Fbin\u002Fcompile",[63,6199,6200],{"class":73}," \u002Fyou_URDF_file_path",[63,6202,6203],{"class":73},"  \u002FMJCF_path\n",[63,6205,6206],{"class":65,"line":84},[63,6207,6208],{"class":80},"#示例\n",[63,6210,6211,6214,6216],{"class":65,"line":95},[63,6212,6213],{"class":69},"\u002Fhome\u002Fxiaofang\u002FApplications\u002Fmujoco-3.7.0\u002Fbin\u002Fcompile",[63,6215,6200],{"class":73},[63,6217,6203],{"class":73},[10,6219,6221],{"id":6220},"三使用c开发","三、使用C++开发",[17,6223,6225],{"id":6224},"main-运行方式","main 运行方式",[1035,6227,6229],{"id":6228},"_1-使用官方的-bassiccc","1. 使用官方的 bassic.cc",[22,6231,6232],{},"打开模型",[53,6234,6238],{"className":6235,"code":6236,"language":6237,"meta":58,"style":58},"language-c++ shiki shiki-themes github-light github-dark","\u002F\u002F模型打开\nchar error[1000] = \"Could not load binary model\";\n\nm = mj_loadXML(\"..\u002Fmodels\u002Fcar.xml\", 0, error, 1000);\n","c++",[60,6239,6240,6245,6250,6254],{"__ignoreMap":58},[63,6241,6242],{"class":65,"line":66},[63,6243,6244],{},"\u002F\u002F模型打开\n",[63,6246,6247],{"class":65,"line":77},[63,6248,6249],{},"char error[1000] = \"Could not load binary model\";\n",[63,6251,6252],{"class":65,"line":84},[63,6253,552],{"emptyLinePlaceholder":551},[63,6255,6256],{"class":65,"line":95},[63,6257,6258],{},"m = mj_loadXML(\"..\u002Fmodels\u002Fcar.xml\", 0, error, 1000);\n",[1035,6260,6262],{"id":6261},"_2-使用ai改造的maincc-更加简洁只有基本的配置","2. 使用AI改造的main.cc （更加简洁，只有基本的配置）",[53,6264,6266],{"className":6235,"code":6265,"language":6237,"meta":58,"style":58},"\u002F\u002Fmaoi.cc\n\n#include \"simulator\u002Fsimulator.h\"\n#include \"control\u002Fcontrol.h\"\n\nint main()\n\n{\n\n    Simulator sim;\n    \n    \u002F\u002F 1. 加载模型\n    if (!sim.load_model(\"..\u002Fmodels\u002Fmodel.xml\"))\n    \n    return 1;\n    \n    \u002F\u002F 2. 初始化窗口和可视化\n    if (!sim.init_visual(1200, 900, \"WheelLeg Demo\"))\n    \n    return 1;\n    \n    \u002F\u002F 3. 设置相机跟踪\n    sim.set_camera_track(\"base_link\", 2.0);\n    \n    \u002F\u002F 4. 初始化控制器（手柄\u002FIMU\u002FPID）\n    CarController controller;\n    \n    controller.Init(sim.model(), sim.data());\n    \n    \u002F\u002F 5. 进入主循环\n    sim.run([&](mjModel* m, mjData* d) {\n    \n    controller.Main_Control_Update();\n    \n    });\n    return 0;\n\n}\n",[60,6267,6268,6273,6277,6282,6287,6291,6296,6300,6305,6309,6314,6318,6323,6328,6332,6337,6341,6346,6351,6355,6359,6363,6368,6373,6377,6382,6387,6391,6396,6400,6405,6410,6414,6419,6424,6430,6436,6441],{"__ignoreMap":58},[63,6269,6270],{"class":65,"line":66},[63,6271,6272],{},"\u002F\u002Fmaoi.cc\n",[63,6274,6275],{"class":65,"line":77},[63,6276,552],{"emptyLinePlaceholder":551},[63,6278,6279],{"class":65,"line":84},[63,6280,6281],{},"#include \"simulator\u002Fsimulator.h\"\n",[63,6283,6284],{"class":65,"line":95},[63,6285,6286],{},"#include \"control\u002Fcontrol.h\"\n",[63,6288,6289],{"class":65,"line":101},[63,6290,552],{"emptyLinePlaceholder":551},[63,6292,6293],{"class":65,"line":114},[63,6294,6295],{},"int main()\n",[63,6297,6298],{"class":65,"line":120},[63,6299,552],{"emptyLinePlaceholder":551},[63,6301,6302],{"class":65,"line":126},[63,6303,6304],{},"{\n",[63,6306,6307],{"class":65,"line":134},[63,6308,552],{"emptyLinePlaceholder":551},[63,6310,6311],{"class":65,"line":397},[63,6312,6313],{},"    Simulator sim;\n",[63,6315,6316],{"class":65,"line":403},[63,6317,111],{},[63,6319,6320],{"class":65,"line":421},[63,6321,6322],{},"    \u002F\u002F 1. 加载模型\n",[63,6324,6325],{"class":65,"line":427},[63,6326,6327],{},"    if (!sim.load_model(\"..\u002Fmodels\u002Fmodel.xml\"))\n",[63,6329,6330],{"class":65,"line":651},[63,6331,111],{},[63,6333,6334],{"class":65,"line":657},[63,6335,6336],{},"    return 1;\n",[63,6338,6339],{"class":65,"line":681},[63,6340,111],{},[63,6342,6343],{"class":65,"line":687},[63,6344,6345],{},"    \u002F\u002F 2. 初始化窗口和可视化\n",[63,6347,6348],{"class":65,"line":692},[63,6349,6350],{},"    if (!sim.init_visual(1200, 900, \"WheelLeg Demo\"))\n",[63,6352,6353],{"class":65,"line":698},[63,6354,111],{},[63,6356,6357],{"class":65,"line":731},[63,6358,6336],{},[63,6360,6361],{"class":65,"line":760},[63,6362,111],{},[63,6364,6365],{"class":65,"line":796},[63,6366,6367],{},"    \u002F\u002F 3. 设置相机跟踪\n",[63,6369,6370],{"class":65,"line":830},[63,6371,6372],{},"    sim.set_camera_track(\"base_link\", 2.0);\n",[63,6374,6375],{"class":65,"line":845},[63,6376,111],{},[63,6378,6379],{"class":65,"line":865},[63,6380,6381],{},"    \u002F\u002F 4. 初始化控制器（手柄\u002FIMU\u002FPID）\n",[63,6383,6384],{"class":65,"line":870},[63,6385,6386],{},"    CarController controller;\n",[63,6388,6389],{"class":65,"line":882},[63,6390,111],{},[63,6392,6393],{"class":65,"line":904},[63,6394,6395],{},"    controller.Init(sim.model(), sim.data());\n",[63,6397,6398],{"class":65,"line":909},[63,6399,111],{},[63,6401,6402],{"class":65,"line":928},[63,6403,6404],{},"    \u002F\u002F 5. 进入主循环\n",[63,6406,6407],{"class":65,"line":937},[63,6408,6409],{},"    sim.run([&](mjModel* m, mjData* d) {\n",[63,6411,6412],{"class":65,"line":953},[63,6413,111],{},[63,6415,6416],{"class":65,"line":973},[63,6417,6418],{},"    controller.Main_Control_Update();\n",[63,6420,6422],{"class":65,"line":6421},34,[63,6423,111],{},[63,6425,6427],{"class":65,"line":6426},35,[63,6428,6429],{},"    });\n",[63,6431,6433],{"class":65,"line":6432},36,[63,6434,6435],{},"    return 0;\n",[63,6437,6439],{"class":65,"line":6438},37,[63,6440,552],{"emptyLinePlaceholder":551},[63,6442,6444],{"class":65,"line":6443},38,[63,6445,6446],{},"}\n",[22,6448,6449],{},[60,6450,6451],{},"simulator.cpp",[53,6453,6455],{"className":6235,"code":6454,"language":6237,"meta":58,"style":58},"#include \"simulator\u002Fsimulator.h\"\n\n#include \u003Ciostream>\n\n  \n\nSimulator::~Simulator()\n\n{\n\n\u002F\u002F 确保 OpenGL 上下文活跃再释放 MuJoCo 渲染资源\n\nif (window_) glfwMakeContextCurrent(window_);\n\nif (visual_ready_) mjr_freeContext(&con_);\n\nif (visual_ready_) mjv_freeScene(&scn_);\n\nif (d_) mj_deleteData(d_);\n\nif (m_) mj_deleteModel(m_);\n\nif (window_) glfwDestroyWindow(window_);\n\n\u002F\u002F Linux + NVIDIA 下 glfwTerminate 可能崩溃，仅 macOS\u002FWindows 调用\n\n#if defined(__APPLE__) || defined(_WIN32)\n\nif (window_) glfwTerminate();\n\n#endif\n\n}\n\n  \n\n\u002F\u002F ==================== 模型加载 ====================\n\nbool Simulator::load_model(const char* xml_path)\n\n{\n\nchar error[1000] = \"Could not load binary model\";\n\nm_ = mj_loadXML(xml_path, nullptr, error, sizeof(error));\n\nif (!m_) {\n\nstd::cerr \u003C\u003C \"[ERROR] 模型加载失败: \" \u003C\u003C error \u003C\u003C std::endl;\n\nreturn false;\n\n}\n\nd_ = mj_makeData(m_);\n\nreturn true;\n\n}\n\n  \n\n\u002F\u002F ==================== 可视化初始化 ====================\n\nbool Simulator::init_visual(int width, int height, const char* title)\n\n{\n\nif (!glfwInit()) {\n\nstd::cerr \u003C\u003C \"[ERROR] GLFW 初始化失败\" \u003C\u003C std::endl;\n\nreturn false;\n\n}\n\n  \n\nwindow_ = glfwCreateWindow(width, height, title, nullptr, nullptr);\n\nif (!window_) {\n\nstd::cerr \u003C\u003C \"[ERROR] 窗口创建失败\" \u003C\u003C std::endl;\n\nreturn false;\n\n}\n\n  \n\nglfwMakeContextCurrent(window_);\n\nglfwSwapInterval(1);\n\n  \n\n\u002F\u002F 通过 user pointer 绑定实例，供静态回调转发\n\nglfwSetWindowUserPointer(window_, this);\n\n  \n\n\u002F\u002F 注册回调\n\nglfwSetKeyCallback(window_, key_cb);\n\nglfwSetMouseButtonCallback(window_, mouse_cb);\n\nglfwSetCursorPosCallback(window_, move_cb);\n\nglfwSetScrollCallback(window_, scroll_cb);\n\n  \n\n\u002F\u002F MuJoCo 可视化初始化\n\nmjv_defaultCamera(&cam_);\n\nmjv_defaultOption(&opt_);\n\nmjv_defaultScene(&scn_);\n\nmjr_defaultContext(&con_);\n\n  \n\nmjv_makeScene(m_, &scn_, 2000);\n\nmjr_makeContext(m_, &con_, mjFONTSCALE_150);\n\n  \n\nvisual_ready_ = true;\n\nreturn true;\n\n}\n\n  \n\n\u002F\u002F ==================== 相机 ====================\n\nvoid Simulator::set_camera_track(const char* body_name, double distance)\n\n{\n\ncam_.type = mjCAMERA_TRACKING;\n\ncam_.trackbodyid = mj_name2id(m_, mjOBJ_BODY, body_name);\n\ncam_.distance = distance;\n\n}\n\n  \n\n\u002F\u002F ==================== 主循环 ====================\n\nvoid Simulator::run(std::function\u003Cvoid(mjModel*, mjData*)> update)\n\n{\n\nwhile (!glfwWindowShouldClose(window_))\n\n{\n\n\u002F\u002F 仿真：每帧跑 1\u002F60 秒\n\nmjtNum sim_start = d_->time;\n\nwhile (d_->time - sim_start \u003C 1.0 \u002F 60.0)\n\n{\n\nif (update) update(m_, d_);\n\nmj_step(m_, d_);\n\n}\n\n  \n\n\u002F\u002F 渲染\n\nmjrRect viewport = {0, 0, 0, 0};\n\nglfwGetFramebufferSize(window_, &viewport.width, &viewport.height);\n\n  \n\nmjv_updateScene(m_, d_, &opt_, nullptr, &cam_, mjCAT_ALL, &scn_);\n\nmjr_render(viewport, &scn_, &con_);\n\nglfwSwapBuffers(window_);\n\nglfwPollEvents();\n\n}\n\n}\n\n  \n\n\u002F\u002F ==================== 键盘回调 ====================\n\nvoid Simulator::on_key(int key, int act)\n\n{\n\n\u002F\u002F 转发给外部处理器\n\nif (key_handler_) key_handler_(key, act);\n\n  \n\n\u002F\u002F Backspace 重置仿真\n\nif (act == GLFW_PRESS && key == GLFW_KEY_BACKSPACE) {\n\nmj_resetData(m_, d_);\n\nmj_forward(m_, d_);\n\n}\n\n}\n\n  \n\n\u002F\u002F ==================== 鼠标按键回调 ====================\n\nvoid Simulator::on_mouse_button(int button, int act)\n\n{\n\nbtn_left_ = (glfwGetMouseButton(window_, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS);\n\nbtn_middle_ = (glfwGetMouseButton(window_, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS);\n\nbtn_right_ = (glfwGetMouseButton(window_, GLFW_MOUSE_BUTTON_RIGHT) == GLFW_PRESS);\n\n  \n\nglfwGetCursorPos(window_, &lastx_, &lasty_);\n\n}\n\n  \n\n\u002F\u002F ==================== 鼠标移动回调 ====================\n\nvoid Simulator::on_mouse_move(double xpos, double ypos)\n\n{\n\nif (!btn_left_ && !btn_middle_ && !btn_right_) return;\n\n  \n\ndouble dx = xpos - lastx_;\n\ndouble dy = ypos - lasty_;\n\nlastx_ = xpos;\n\nlasty_ = ypos;\n\n  \n\nint width, height;\n\nglfwGetWindowSize(window_, &width, &height);\n\n  \n\nbool shift = (glfwGetKey(window_, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS ||\n\nglfwGetKey(window_, GLFW_KEY_RIGHT_SHIFT) == GLFW_PRESS);\n\n  \n\nmjtMouse action;\n\nif (btn_right_) action = shift ? mjMOUSE_MOVE_H : mjMOUSE_MOVE_V;\n\nelse if (btn_left_) action = shift ? mjMOUSE_ROTATE_H : mjMOUSE_ROTATE_V;\n\nelse action = mjMOUSE_ZOOM;\n\n  \n\nmjv_moveCamera(m_, action, dx \u002F height, dy \u002F height, &scn_, &cam_);\n\n}\n\n  \n\n\u002F\u002F ==================== 滚轮回调 ====================\n\nvoid Simulator::on_scroll(double xoffset, double yoffset)\n\n{\n\nmjv_moveCamera(m_, mjMOUSE_ZOOM, 0, -0.05 * yoffset, &scn_, &cam_);\n\n}\n",[60,6456,6457,6461,6465,6470,6474,6479,6483,6488,6492,6496,6500,6505,6509,6514,6518,6523,6527,6532,6536,6541,6545,6550,6554,6559,6563,6568,6572,6577,6581,6586,6590,6595,6599,6603,6607,6611,6615,6620,6624,6630,6635,6640,6645,6650,6655,6661,6666,6672,6677,6683,6688,6694,6699,6704,6709,6715,6720,6726,6731,6736,6741,6746,6751,6757,6762,6768,6773,6778,6783,6789,6794,6800,6805,6810,6815,6820,6825,6830,6835,6841,6846,6852,6857,6863,6868,6873,6878,6883,6888,6893,6898,6904,6909,6915,6920,6925,6930,6936,6941,6947,6952,6957,6962,6968,6973,6979,6984,6990,6995,7001,7006,7012,7017,7022,7027,7033,7038,7044,7049,7055,7060,7066,7071,7077,7082,7087,7092,7098,7103,7109,7114,7119,7124,7130,7135,7140,7145,7150,7155,7160,7165,7171,7176,7182,7187,7192,7197,7203,7208,7214,7219,7225,7230,7235,7240,7245,7250,7256,7261,7267,7272,7277,7282,7288,7293,7298,7303,7309,7314,7320,7325,7331,7336,7341,7346,7352,7357,7363,7368,7373,7378,7383,7388,7394,7399,7405,7410,7416,7421,7426,7431,7437,7442,7448,7453,7459,7464,7470,7475,7480,7485,7490,7495,7500,7505,7511,7516,7522,7527,7532,7537,7543,7548,7554,7559,7564,7569,7575,7580,7586,7591,7597,7602,7608,7613,7618,7623,7628,7633,7638,7643,7649,7654,7660,7665,7670,7675,7681,7686,7692,7697,7703,7708,7713,7718,7724,7729,7734,7739,7744,7749,7755,7760,7766,7771,7776,7781,7787,7792,7797,7802,7808,7813,7819,7824,7830,7835,7841,7846,7851,7856,7862,7867,7873,7878,7883,7888,7894,7899,7905,7910,7915,7920,7926,7931,7937,7942,7948,7953,7959,7964,7969,7974,7980,7985,7990,7995,8000,8005,8011,8016,8022,8027,8032,8037,8043,8048],{"__ignoreMap":58},[63,6458,6459],{"class":65,"line":66},[63,6460,6281],{},[63,6462,6463],{"class":65,"line":77},[63,6464,552],{"emptyLinePlaceholder":551},[63,6466,6467],{"class":65,"line":84},[63,6468,6469],{},"#include \u003Ciostream>\n",[63,6471,6472],{"class":65,"line":95},[63,6473,552],{"emptyLinePlaceholder":551},[63,6475,6476],{"class":65,"line":101},[63,6477,6478],{},"  \n",[63,6480,6481],{"class":65,"line":114},[63,6482,552],{"emptyLinePlaceholder":551},[63,6484,6485],{"class":65,"line":120},[63,6486,6487],{},"Simulator::~Simulator()\n",[63,6489,6490],{"class":65,"line":126},[63,6491,552],{"emptyLinePlaceholder":551},[63,6493,6494],{"class":65,"line":134},[63,6495,6304],{},[63,6497,6498],{"class":65,"line":397},[63,6499,552],{"emptyLinePlaceholder":551},[63,6501,6502],{"class":65,"line":403},[63,6503,6504],{},"\u002F\u002F 确保 OpenGL 上下文活跃再释放 MuJoCo 渲染资源\n",[63,6506,6507],{"class":65,"line":421},[63,6508,552],{"emptyLinePlaceholder":551},[63,6510,6511],{"class":65,"line":427},[63,6512,6513],{},"if (window_) glfwMakeContextCurrent(window_);\n",[63,6515,6516],{"class":65,"line":651},[63,6517,552],{"emptyLinePlaceholder":551},[63,6519,6520],{"class":65,"line":657},[63,6521,6522],{},"if (visual_ready_) mjr_freeContext(&con_);\n",[63,6524,6525],{"class":65,"line":681},[63,6526,552],{"emptyLinePlaceholder":551},[63,6528,6529],{"class":65,"line":687},[63,6530,6531],{},"if (visual_ready_) mjv_freeScene(&scn_);\n",[63,6533,6534],{"class":65,"line":692},[63,6535,552],{"emptyLinePlaceholder":551},[63,6537,6538],{"class":65,"line":698},[63,6539,6540],{},"if (d_) mj_deleteData(d_);\n",[63,6542,6543],{"class":65,"line":731},[63,6544,552],{"emptyLinePlaceholder":551},[63,6546,6547],{"class":65,"line":760},[63,6548,6549],{},"if (m_) mj_deleteModel(m_);\n",[63,6551,6552],{"class":65,"line":796},[63,6553,552],{"emptyLinePlaceholder":551},[63,6555,6556],{"class":65,"line":830},[63,6557,6558],{},"if (window_) glfwDestroyWindow(window_);\n",[63,6560,6561],{"class":65,"line":845},[63,6562,552],{"emptyLinePlaceholder":551},[63,6564,6565],{"class":65,"line":865},[63,6566,6567],{},"\u002F\u002F Linux + NVIDIA 下 glfwTerminate 可能崩溃，仅 macOS\u002FWindows 调用\n",[63,6569,6570],{"class":65,"line":870},[63,6571,552],{"emptyLinePlaceholder":551},[63,6573,6574],{"class":65,"line":882},[63,6575,6576],{},"#if defined(__APPLE__) || defined(_WIN32)\n",[63,6578,6579],{"class":65,"line":904},[63,6580,552],{"emptyLinePlaceholder":551},[63,6582,6583],{"class":65,"line":909},[63,6584,6585],{},"if (window_) glfwTerminate();\n",[63,6587,6588],{"class":65,"line":928},[63,6589,552],{"emptyLinePlaceholder":551},[63,6591,6592],{"class":65,"line":937},[63,6593,6594],{},"#endif\n",[63,6596,6597],{"class":65,"line":953},[63,6598,552],{"emptyLinePlaceholder":551},[63,6600,6601],{"class":65,"line":973},[63,6602,6446],{},[63,6604,6605],{"class":65,"line":6421},[63,6606,552],{"emptyLinePlaceholder":551},[63,6608,6609],{"class":65,"line":6426},[63,6610,6478],{},[63,6612,6613],{"class":65,"line":6432},[63,6614,552],{"emptyLinePlaceholder":551},[63,6616,6617],{"class":65,"line":6438},[63,6618,6619],{},"\u002F\u002F ==================== 模型加载 ====================\n",[63,6621,6622],{"class":65,"line":6443},[63,6623,552],{"emptyLinePlaceholder":551},[63,6625,6627],{"class":65,"line":6626},39,[63,6628,6629],{},"bool Simulator::load_model(const char* xml_path)\n",[63,6631,6633],{"class":65,"line":6632},40,[63,6634,552],{"emptyLinePlaceholder":551},[63,6636,6638],{"class":65,"line":6637},41,[63,6639,6304],{},[63,6641,6643],{"class":65,"line":6642},42,[63,6644,552],{"emptyLinePlaceholder":551},[63,6646,6648],{"class":65,"line":6647},43,[63,6649,6249],{},[63,6651,6653],{"class":65,"line":6652},44,[63,6654,552],{"emptyLinePlaceholder":551},[63,6656,6658],{"class":65,"line":6657},45,[63,6659,6660],{},"m_ = mj_loadXML(xml_path, nullptr, error, sizeof(error));\n",[63,6662,6664],{"class":65,"line":6663},46,[63,6665,552],{"emptyLinePlaceholder":551},[63,6667,6669],{"class":65,"line":6668},47,[63,6670,6671],{},"if (!m_) {\n",[63,6673,6675],{"class":65,"line":6674},48,[63,6676,552],{"emptyLinePlaceholder":551},[63,6678,6680],{"class":65,"line":6679},49,[63,6681,6682],{},"std::cerr \u003C\u003C \"[ERROR] 模型加载失败: \" \u003C\u003C error \u003C\u003C std::endl;\n",[63,6684,6686],{"class":65,"line":6685},50,[63,6687,552],{"emptyLinePlaceholder":551},[63,6689,6691],{"class":65,"line":6690},51,[63,6692,6693],{},"return false;\n",[63,6695,6697],{"class":65,"line":6696},52,[63,6698,552],{"emptyLinePlaceholder":551},[63,6700,6702],{"class":65,"line":6701},53,[63,6703,6446],{},[63,6705,6707],{"class":65,"line":6706},54,[63,6708,552],{"emptyLinePlaceholder":551},[63,6710,6712],{"class":65,"line":6711},55,[63,6713,6714],{},"d_ = mj_makeData(m_);\n",[63,6716,6718],{"class":65,"line":6717},56,[63,6719,552],{"emptyLinePlaceholder":551},[63,6721,6723],{"class":65,"line":6722},57,[63,6724,6725],{},"return true;\n",[63,6727,6729],{"class":65,"line":6728},58,[63,6730,552],{"emptyLinePlaceholder":551},[63,6732,6734],{"class":65,"line":6733},59,[63,6735,6446],{},[63,6737,6739],{"class":65,"line":6738},60,[63,6740,552],{"emptyLinePlaceholder":551},[63,6742,6744],{"class":65,"line":6743},61,[63,6745,6478],{},[63,6747,6749],{"class":65,"line":6748},62,[63,6750,552],{"emptyLinePlaceholder":551},[63,6752,6754],{"class":65,"line":6753},63,[63,6755,6756],{},"\u002F\u002F ==================== 可视化初始化 ====================\n",[63,6758,6760],{"class":65,"line":6759},64,[63,6761,552],{"emptyLinePlaceholder":551},[63,6763,6765],{"class":65,"line":6764},65,[63,6766,6767],{},"bool Simulator::init_visual(int width, int height, const char* title)\n",[63,6769,6771],{"class":65,"line":6770},66,[63,6772,552],{"emptyLinePlaceholder":551},[63,6774,6776],{"class":65,"line":6775},67,[63,6777,6304],{},[63,6779,6781],{"class":65,"line":6780},68,[63,6782,552],{"emptyLinePlaceholder":551},[63,6784,6786],{"class":65,"line":6785},69,[63,6787,6788],{},"if (!glfwInit()) {\n",[63,6790,6792],{"class":65,"line":6791},70,[63,6793,552],{"emptyLinePlaceholder":551},[63,6795,6797],{"class":65,"line":6796},71,[63,6798,6799],{},"std::cerr \u003C\u003C \"[ERROR] GLFW 初始化失败\" \u003C\u003C std::endl;\n",[63,6801,6803],{"class":65,"line":6802},72,[63,6804,552],{"emptyLinePlaceholder":551},[63,6806,6808],{"class":65,"line":6807},73,[63,6809,6693],{},[63,6811,6813],{"class":65,"line":6812},74,[63,6814,552],{"emptyLinePlaceholder":551},[63,6816,6818],{"class":65,"line":6817},75,[63,6819,6446],{},[63,6821,6823],{"class":65,"line":6822},76,[63,6824,552],{"emptyLinePlaceholder":551},[63,6826,6828],{"class":65,"line":6827},77,[63,6829,6478],{},[63,6831,6833],{"class":65,"line":6832},78,[63,6834,552],{"emptyLinePlaceholder":551},[63,6836,6838],{"class":65,"line":6837},79,[63,6839,6840],{},"window_ = glfwCreateWindow(width, height, title, nullptr, nullptr);\n",[63,6842,6844],{"class":65,"line":6843},80,[63,6845,552],{"emptyLinePlaceholder":551},[63,6847,6849],{"class":65,"line":6848},81,[63,6850,6851],{},"if (!window_) {\n",[63,6853,6855],{"class":65,"line":6854},82,[63,6856,552],{"emptyLinePlaceholder":551},[63,6858,6860],{"class":65,"line":6859},83,[63,6861,6862],{},"std::cerr \u003C\u003C \"[ERROR] 窗口创建失败\" \u003C\u003C std::endl;\n",[63,6864,6866],{"class":65,"line":6865},84,[63,6867,552],{"emptyLinePlaceholder":551},[63,6869,6871],{"class":65,"line":6870},85,[63,6872,6693],{},[63,6874,6876],{"class":65,"line":6875},86,[63,6877,552],{"emptyLinePlaceholder":551},[63,6879,6881],{"class":65,"line":6880},87,[63,6882,6446],{},[63,6884,6886],{"class":65,"line":6885},88,[63,6887,552],{"emptyLinePlaceholder":551},[63,6889,6891],{"class":65,"line":6890},89,[63,6892,6478],{},[63,6894,6896],{"class":65,"line":6895},90,[63,6897,552],{"emptyLinePlaceholder":551},[63,6899,6901],{"class":65,"line":6900},91,[63,6902,6903],{},"glfwMakeContextCurrent(window_);\n",[63,6905,6907],{"class":65,"line":6906},92,[63,6908,552],{"emptyLinePlaceholder":551},[63,6910,6912],{"class":65,"line":6911},93,[63,6913,6914],{},"glfwSwapInterval(1);\n",[63,6916,6918],{"class":65,"line":6917},94,[63,6919,552],{"emptyLinePlaceholder":551},[63,6921,6923],{"class":65,"line":6922},95,[63,6924,6478],{},[63,6926,6928],{"class":65,"line":6927},96,[63,6929,552],{"emptyLinePlaceholder":551},[63,6931,6933],{"class":65,"line":6932},97,[63,6934,6935],{},"\u002F\u002F 通过 user pointer 绑定实例，供静态回调转发\n",[63,6937,6939],{"class":65,"line":6938},98,[63,6940,552],{"emptyLinePlaceholder":551},[63,6942,6944],{"class":65,"line":6943},99,[63,6945,6946],{},"glfwSetWindowUserPointer(window_, this);\n",[63,6948,6950],{"class":65,"line":6949},100,[63,6951,552],{"emptyLinePlaceholder":551},[63,6953,6955],{"class":65,"line":6954},101,[63,6956,6478],{},[63,6958,6960],{"class":65,"line":6959},102,[63,6961,552],{"emptyLinePlaceholder":551},[63,6963,6965],{"class":65,"line":6964},103,[63,6966,6967],{},"\u002F\u002F 注册回调\n",[63,6969,6971],{"class":65,"line":6970},104,[63,6972,552],{"emptyLinePlaceholder":551},[63,6974,6976],{"class":65,"line":6975},105,[63,6977,6978],{},"glfwSetKeyCallback(window_, key_cb);\n",[63,6980,6982],{"class":65,"line":6981},106,[63,6983,552],{"emptyLinePlaceholder":551},[63,6985,6987],{"class":65,"line":6986},107,[63,6988,6989],{},"glfwSetMouseButtonCallback(window_, mouse_cb);\n",[63,6991,6993],{"class":65,"line":6992},108,[63,6994,552],{"emptyLinePlaceholder":551},[63,6996,6998],{"class":65,"line":6997},109,[63,6999,7000],{},"glfwSetCursorPosCallback(window_, move_cb);\n",[63,7002,7004],{"class":65,"line":7003},110,[63,7005,552],{"emptyLinePlaceholder":551},[63,7007,7009],{"class":65,"line":7008},111,[63,7010,7011],{},"glfwSetScrollCallback(window_, scroll_cb);\n",[63,7013,7015],{"class":65,"line":7014},112,[63,7016,552],{"emptyLinePlaceholder":551},[63,7018,7020],{"class":65,"line":7019},113,[63,7021,6478],{},[63,7023,7025],{"class":65,"line":7024},114,[63,7026,552],{"emptyLinePlaceholder":551},[63,7028,7030],{"class":65,"line":7029},115,[63,7031,7032],{},"\u002F\u002F MuJoCo 可视化初始化\n",[63,7034,7036],{"class":65,"line":7035},116,[63,7037,552],{"emptyLinePlaceholder":551},[63,7039,7041],{"class":65,"line":7040},117,[63,7042,7043],{},"mjv_defaultCamera(&cam_);\n",[63,7045,7047],{"class":65,"line":7046},118,[63,7048,552],{"emptyLinePlaceholder":551},[63,7050,7052],{"class":65,"line":7051},119,[63,7053,7054],{},"mjv_defaultOption(&opt_);\n",[63,7056,7058],{"class":65,"line":7057},120,[63,7059,552],{"emptyLinePlaceholder":551},[63,7061,7063],{"class":65,"line":7062},121,[63,7064,7065],{},"mjv_defaultScene(&scn_);\n",[63,7067,7069],{"class":65,"line":7068},122,[63,7070,552],{"emptyLinePlaceholder":551},[63,7072,7074],{"class":65,"line":7073},123,[63,7075,7076],{},"mjr_defaultContext(&con_);\n",[63,7078,7080],{"class":65,"line":7079},124,[63,7081,552],{"emptyLinePlaceholder":551},[63,7083,7085],{"class":65,"line":7084},125,[63,7086,6478],{},[63,7088,7090],{"class":65,"line":7089},126,[63,7091,552],{"emptyLinePlaceholder":551},[63,7093,7095],{"class":65,"line":7094},127,[63,7096,7097],{},"mjv_makeScene(m_, &scn_, 2000);\n",[63,7099,7101],{"class":65,"line":7100},128,[63,7102,552],{"emptyLinePlaceholder":551},[63,7104,7106],{"class":65,"line":7105},129,[63,7107,7108],{},"mjr_makeContext(m_, &con_, mjFONTSCALE_150);\n",[63,7110,7112],{"class":65,"line":7111},130,[63,7113,552],{"emptyLinePlaceholder":551},[63,7115,7117],{"class":65,"line":7116},131,[63,7118,6478],{},[63,7120,7122],{"class":65,"line":7121},132,[63,7123,552],{"emptyLinePlaceholder":551},[63,7125,7127],{"class":65,"line":7126},133,[63,7128,7129],{},"visual_ready_ = true;\n",[63,7131,7133],{"class":65,"line":7132},134,[63,7134,552],{"emptyLinePlaceholder":551},[63,7136,7138],{"class":65,"line":7137},135,[63,7139,6725],{},[63,7141,7143],{"class":65,"line":7142},136,[63,7144,552],{"emptyLinePlaceholder":551},[63,7146,7148],{"class":65,"line":7147},137,[63,7149,6446],{},[63,7151,7153],{"class":65,"line":7152},138,[63,7154,552],{"emptyLinePlaceholder":551},[63,7156,7158],{"class":65,"line":7157},139,[63,7159,6478],{},[63,7161,7163],{"class":65,"line":7162},140,[63,7164,552],{"emptyLinePlaceholder":551},[63,7166,7168],{"class":65,"line":7167},141,[63,7169,7170],{},"\u002F\u002F ==================== 相机 ====================\n",[63,7172,7174],{"class":65,"line":7173},142,[63,7175,552],{"emptyLinePlaceholder":551},[63,7177,7179],{"class":65,"line":7178},143,[63,7180,7181],{},"void Simulator::set_camera_track(const char* body_name, double distance)\n",[63,7183,7185],{"class":65,"line":7184},144,[63,7186,552],{"emptyLinePlaceholder":551},[63,7188,7190],{"class":65,"line":7189},145,[63,7191,6304],{},[63,7193,7195],{"class":65,"line":7194},146,[63,7196,552],{"emptyLinePlaceholder":551},[63,7198,7200],{"class":65,"line":7199},147,[63,7201,7202],{},"cam_.type = mjCAMERA_TRACKING;\n",[63,7204,7206],{"class":65,"line":7205},148,[63,7207,552],{"emptyLinePlaceholder":551},[63,7209,7211],{"class":65,"line":7210},149,[63,7212,7213],{},"cam_.trackbodyid = mj_name2id(m_, mjOBJ_BODY, body_name);\n",[63,7215,7217],{"class":65,"line":7216},150,[63,7218,552],{"emptyLinePlaceholder":551},[63,7220,7222],{"class":65,"line":7221},151,[63,7223,7224],{},"cam_.distance = distance;\n",[63,7226,7228],{"class":65,"line":7227},152,[63,7229,552],{"emptyLinePlaceholder":551},[63,7231,7233],{"class":65,"line":7232},153,[63,7234,6446],{},[63,7236,7238],{"class":65,"line":7237},154,[63,7239,552],{"emptyLinePlaceholder":551},[63,7241,7243],{"class":65,"line":7242},155,[63,7244,6478],{},[63,7246,7248],{"class":65,"line":7247},156,[63,7249,552],{"emptyLinePlaceholder":551},[63,7251,7253],{"class":65,"line":7252},157,[63,7254,7255],{},"\u002F\u002F ==================== 主循环 ====================\n",[63,7257,7259],{"class":65,"line":7258},158,[63,7260,552],{"emptyLinePlaceholder":551},[63,7262,7264],{"class":65,"line":7263},159,[63,7265,7266],{},"void Simulator::run(std::function\u003Cvoid(mjModel*, mjData*)> update)\n",[63,7268,7270],{"class":65,"line":7269},160,[63,7271,552],{"emptyLinePlaceholder":551},[63,7273,7275],{"class":65,"line":7274},161,[63,7276,6304],{},[63,7278,7280],{"class":65,"line":7279},162,[63,7281,552],{"emptyLinePlaceholder":551},[63,7283,7285],{"class":65,"line":7284},163,[63,7286,7287],{},"while (!glfwWindowShouldClose(window_))\n",[63,7289,7291],{"class":65,"line":7290},164,[63,7292,552],{"emptyLinePlaceholder":551},[63,7294,7296],{"class":65,"line":7295},165,[63,7297,6304],{},[63,7299,7301],{"class":65,"line":7300},166,[63,7302,552],{"emptyLinePlaceholder":551},[63,7304,7306],{"class":65,"line":7305},167,[63,7307,7308],{},"\u002F\u002F 仿真：每帧跑 1\u002F60 秒\n",[63,7310,7312],{"class":65,"line":7311},168,[63,7313,552],{"emptyLinePlaceholder":551},[63,7315,7317],{"class":65,"line":7316},169,[63,7318,7319],{},"mjtNum sim_start = d_->time;\n",[63,7321,7323],{"class":65,"line":7322},170,[63,7324,552],{"emptyLinePlaceholder":551},[63,7326,7328],{"class":65,"line":7327},171,[63,7329,7330],{},"while (d_->time - sim_start \u003C 1.0 \u002F 60.0)\n",[63,7332,7334],{"class":65,"line":7333},172,[63,7335,552],{"emptyLinePlaceholder":551},[63,7337,7339],{"class":65,"line":7338},173,[63,7340,6304],{},[63,7342,7344],{"class":65,"line":7343},174,[63,7345,552],{"emptyLinePlaceholder":551},[63,7347,7349],{"class":65,"line":7348},175,[63,7350,7351],{},"if (update) update(m_, d_);\n",[63,7353,7355],{"class":65,"line":7354},176,[63,7356,552],{"emptyLinePlaceholder":551},[63,7358,7360],{"class":65,"line":7359},177,[63,7361,7362],{},"mj_step(m_, d_);\n",[63,7364,7366],{"class":65,"line":7365},178,[63,7367,552],{"emptyLinePlaceholder":551},[63,7369,7371],{"class":65,"line":7370},179,[63,7372,6446],{},[63,7374,7376],{"class":65,"line":7375},180,[63,7377,552],{"emptyLinePlaceholder":551},[63,7379,7381],{"class":65,"line":7380},181,[63,7382,6478],{},[63,7384,7386],{"class":65,"line":7385},182,[63,7387,552],{"emptyLinePlaceholder":551},[63,7389,7391],{"class":65,"line":7390},183,[63,7392,7393],{},"\u002F\u002F 渲染\n",[63,7395,7397],{"class":65,"line":7396},184,[63,7398,552],{"emptyLinePlaceholder":551},[63,7400,7402],{"class":65,"line":7401},185,[63,7403,7404],{},"mjrRect viewport = {0, 0, 0, 0};\n",[63,7406,7408],{"class":65,"line":7407},186,[63,7409,552],{"emptyLinePlaceholder":551},[63,7411,7413],{"class":65,"line":7412},187,[63,7414,7415],{},"glfwGetFramebufferSize(window_, &viewport.width, &viewport.height);\n",[63,7417,7419],{"class":65,"line":7418},188,[63,7420,552],{"emptyLinePlaceholder":551},[63,7422,7424],{"class":65,"line":7423},189,[63,7425,6478],{},[63,7427,7429],{"class":65,"line":7428},190,[63,7430,552],{"emptyLinePlaceholder":551},[63,7432,7434],{"class":65,"line":7433},191,[63,7435,7436],{},"mjv_updateScene(m_, d_, &opt_, nullptr, &cam_, mjCAT_ALL, &scn_);\n",[63,7438,7440],{"class":65,"line":7439},192,[63,7441,552],{"emptyLinePlaceholder":551},[63,7443,7445],{"class":65,"line":7444},193,[63,7446,7447],{},"mjr_render(viewport, &scn_, &con_);\n",[63,7449,7451],{"class":65,"line":7450},194,[63,7452,552],{"emptyLinePlaceholder":551},[63,7454,7456],{"class":65,"line":7455},195,[63,7457,7458],{},"glfwSwapBuffers(window_);\n",[63,7460,7462],{"class":65,"line":7461},196,[63,7463,552],{"emptyLinePlaceholder":551},[63,7465,7467],{"class":65,"line":7466},197,[63,7468,7469],{},"glfwPollEvents();\n",[63,7471,7473],{"class":65,"line":7472},198,[63,7474,552],{"emptyLinePlaceholder":551},[63,7476,7478],{"class":65,"line":7477},199,[63,7479,6446],{},[63,7481,7483],{"class":65,"line":7482},200,[63,7484,552],{"emptyLinePlaceholder":551},[63,7486,7488],{"class":65,"line":7487},201,[63,7489,6446],{},[63,7491,7493],{"class":65,"line":7492},202,[63,7494,552],{"emptyLinePlaceholder":551},[63,7496,7498],{"class":65,"line":7497},203,[63,7499,6478],{},[63,7501,7503],{"class":65,"line":7502},204,[63,7504,552],{"emptyLinePlaceholder":551},[63,7506,7508],{"class":65,"line":7507},205,[63,7509,7510],{},"\u002F\u002F ==================== 键盘回调 ====================\n",[63,7512,7514],{"class":65,"line":7513},206,[63,7515,552],{"emptyLinePlaceholder":551},[63,7517,7519],{"class":65,"line":7518},207,[63,7520,7521],{},"void Simulator::on_key(int key, int act)\n",[63,7523,7525],{"class":65,"line":7524},208,[63,7526,552],{"emptyLinePlaceholder":551},[63,7528,7530],{"class":65,"line":7529},209,[63,7531,6304],{},[63,7533,7535],{"class":65,"line":7534},210,[63,7536,552],{"emptyLinePlaceholder":551},[63,7538,7540],{"class":65,"line":7539},211,[63,7541,7542],{},"\u002F\u002F 转发给外部处理器\n",[63,7544,7546],{"class":65,"line":7545},212,[63,7547,552],{"emptyLinePlaceholder":551},[63,7549,7551],{"class":65,"line":7550},213,[63,7552,7553],{},"if (key_handler_) key_handler_(key, act);\n",[63,7555,7557],{"class":65,"line":7556},214,[63,7558,552],{"emptyLinePlaceholder":551},[63,7560,7562],{"class":65,"line":7561},215,[63,7563,6478],{},[63,7565,7567],{"class":65,"line":7566},216,[63,7568,552],{"emptyLinePlaceholder":551},[63,7570,7572],{"class":65,"line":7571},217,[63,7573,7574],{},"\u002F\u002F Backspace 重置仿真\n",[63,7576,7578],{"class":65,"line":7577},218,[63,7579,552],{"emptyLinePlaceholder":551},[63,7581,7583],{"class":65,"line":7582},219,[63,7584,7585],{},"if (act == GLFW_PRESS && key == GLFW_KEY_BACKSPACE) {\n",[63,7587,7589],{"class":65,"line":7588},220,[63,7590,552],{"emptyLinePlaceholder":551},[63,7592,7594],{"class":65,"line":7593},221,[63,7595,7596],{},"mj_resetData(m_, d_);\n",[63,7598,7600],{"class":65,"line":7599},222,[63,7601,552],{"emptyLinePlaceholder":551},[63,7603,7605],{"class":65,"line":7604},223,[63,7606,7607],{},"mj_forward(m_, d_);\n",[63,7609,7611],{"class":65,"line":7610},224,[63,7612,552],{"emptyLinePlaceholder":551},[63,7614,7616],{"class":65,"line":7615},225,[63,7617,6446],{},[63,7619,7621],{"class":65,"line":7620},226,[63,7622,552],{"emptyLinePlaceholder":551},[63,7624,7626],{"class":65,"line":7625},227,[63,7627,6446],{},[63,7629,7631],{"class":65,"line":7630},228,[63,7632,552],{"emptyLinePlaceholder":551},[63,7634,7636],{"class":65,"line":7635},229,[63,7637,6478],{},[63,7639,7641],{"class":65,"line":7640},230,[63,7642,552],{"emptyLinePlaceholder":551},[63,7644,7646],{"class":65,"line":7645},231,[63,7647,7648],{},"\u002F\u002F ==================== 鼠标按键回调 ====================\n",[63,7650,7652],{"class":65,"line":7651},232,[63,7653,552],{"emptyLinePlaceholder":551},[63,7655,7657],{"class":65,"line":7656},233,[63,7658,7659],{},"void Simulator::on_mouse_button(int button, int act)\n",[63,7661,7663],{"class":65,"line":7662},234,[63,7664,552],{"emptyLinePlaceholder":551},[63,7666,7668],{"class":65,"line":7667},235,[63,7669,6304],{},[63,7671,7673],{"class":65,"line":7672},236,[63,7674,552],{"emptyLinePlaceholder":551},[63,7676,7678],{"class":65,"line":7677},237,[63,7679,7680],{},"btn_left_ = (glfwGetMouseButton(window_, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS);\n",[63,7682,7684],{"class":65,"line":7683},238,[63,7685,552],{"emptyLinePlaceholder":551},[63,7687,7689],{"class":65,"line":7688},239,[63,7690,7691],{},"btn_middle_ = (glfwGetMouseButton(window_, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS);\n",[63,7693,7695],{"class":65,"line":7694},240,[63,7696,552],{"emptyLinePlaceholder":551},[63,7698,7700],{"class":65,"line":7699},241,[63,7701,7702],{},"btn_right_ = (glfwGetMouseButton(window_, GLFW_MOUSE_BUTTON_RIGHT) == GLFW_PRESS);\n",[63,7704,7706],{"class":65,"line":7705},242,[63,7707,552],{"emptyLinePlaceholder":551},[63,7709,7711],{"class":65,"line":7710},243,[63,7712,6478],{},[63,7714,7716],{"class":65,"line":7715},244,[63,7717,552],{"emptyLinePlaceholder":551},[63,7719,7721],{"class":65,"line":7720},245,[63,7722,7723],{},"glfwGetCursorPos(window_, &lastx_, &lasty_);\n",[63,7725,7727],{"class":65,"line":7726},246,[63,7728,552],{"emptyLinePlaceholder":551},[63,7730,7732],{"class":65,"line":7731},247,[63,7733,6446],{},[63,7735,7737],{"class":65,"line":7736},248,[63,7738,552],{"emptyLinePlaceholder":551},[63,7740,7742],{"class":65,"line":7741},249,[63,7743,6478],{},[63,7745,7747],{"class":65,"line":7746},250,[63,7748,552],{"emptyLinePlaceholder":551},[63,7750,7752],{"class":65,"line":7751},251,[63,7753,7754],{},"\u002F\u002F ==================== 鼠标移动回调 ====================\n",[63,7756,7758],{"class":65,"line":7757},252,[63,7759,552],{"emptyLinePlaceholder":551},[63,7761,7763],{"class":65,"line":7762},253,[63,7764,7765],{},"void Simulator::on_mouse_move(double xpos, double ypos)\n",[63,7767,7769],{"class":65,"line":7768},254,[63,7770,552],{"emptyLinePlaceholder":551},[63,7772,7774],{"class":65,"line":7773},255,[63,7775,6304],{},[63,7777,7779],{"class":65,"line":7778},256,[63,7780,552],{"emptyLinePlaceholder":551},[63,7782,7784],{"class":65,"line":7783},257,[63,7785,7786],{},"if (!btn_left_ && !btn_middle_ && !btn_right_) return;\n",[63,7788,7790],{"class":65,"line":7789},258,[63,7791,552],{"emptyLinePlaceholder":551},[63,7793,7795],{"class":65,"line":7794},259,[63,7796,6478],{},[63,7798,7800],{"class":65,"line":7799},260,[63,7801,552],{"emptyLinePlaceholder":551},[63,7803,7805],{"class":65,"line":7804},261,[63,7806,7807],{},"double dx = xpos - lastx_;\n",[63,7809,7811],{"class":65,"line":7810},262,[63,7812,552],{"emptyLinePlaceholder":551},[63,7814,7816],{"class":65,"line":7815},263,[63,7817,7818],{},"double dy = ypos - lasty_;\n",[63,7820,7822],{"class":65,"line":7821},264,[63,7823,552],{"emptyLinePlaceholder":551},[63,7825,7827],{"class":65,"line":7826},265,[63,7828,7829],{},"lastx_ = xpos;\n",[63,7831,7833],{"class":65,"line":7832},266,[63,7834,552],{"emptyLinePlaceholder":551},[63,7836,7838],{"class":65,"line":7837},267,[63,7839,7840],{},"lasty_ = ypos;\n",[63,7842,7844],{"class":65,"line":7843},268,[63,7845,552],{"emptyLinePlaceholder":551},[63,7847,7849],{"class":65,"line":7848},269,[63,7850,6478],{},[63,7852,7854],{"class":65,"line":7853},270,[63,7855,552],{"emptyLinePlaceholder":551},[63,7857,7859],{"class":65,"line":7858},271,[63,7860,7861],{},"int width, height;\n",[63,7863,7865],{"class":65,"line":7864},272,[63,7866,552],{"emptyLinePlaceholder":551},[63,7868,7870],{"class":65,"line":7869},273,[63,7871,7872],{},"glfwGetWindowSize(window_, &width, &height);\n",[63,7874,7876],{"class":65,"line":7875},274,[63,7877,552],{"emptyLinePlaceholder":551},[63,7879,7881],{"class":65,"line":7880},275,[63,7882,6478],{},[63,7884,7886],{"class":65,"line":7885},276,[63,7887,552],{"emptyLinePlaceholder":551},[63,7889,7891],{"class":65,"line":7890},277,[63,7892,7893],{},"bool shift = (glfwGetKey(window_, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS ||\n",[63,7895,7897],{"class":65,"line":7896},278,[63,7898,552],{"emptyLinePlaceholder":551},[63,7900,7902],{"class":65,"line":7901},279,[63,7903,7904],{},"glfwGetKey(window_, GLFW_KEY_RIGHT_SHIFT) == GLFW_PRESS);\n",[63,7906,7908],{"class":65,"line":7907},280,[63,7909,552],{"emptyLinePlaceholder":551},[63,7911,7913],{"class":65,"line":7912},281,[63,7914,6478],{},[63,7916,7918],{"class":65,"line":7917},282,[63,7919,552],{"emptyLinePlaceholder":551},[63,7921,7923],{"class":65,"line":7922},283,[63,7924,7925],{},"mjtMouse action;\n",[63,7927,7929],{"class":65,"line":7928},284,[63,7930,552],{"emptyLinePlaceholder":551},[63,7932,7934],{"class":65,"line":7933},285,[63,7935,7936],{},"if (btn_right_) action = shift ? mjMOUSE_MOVE_H : mjMOUSE_MOVE_V;\n",[63,7938,7940],{"class":65,"line":7939},286,[63,7941,552],{"emptyLinePlaceholder":551},[63,7943,7945],{"class":65,"line":7944},287,[63,7946,7947],{},"else if (btn_left_) action = shift ? mjMOUSE_ROTATE_H : mjMOUSE_ROTATE_V;\n",[63,7949,7951],{"class":65,"line":7950},288,[63,7952,552],{"emptyLinePlaceholder":551},[63,7954,7956],{"class":65,"line":7955},289,[63,7957,7958],{},"else action = mjMOUSE_ZOOM;\n",[63,7960,7962],{"class":65,"line":7961},290,[63,7963,552],{"emptyLinePlaceholder":551},[63,7965,7967],{"class":65,"line":7966},291,[63,7968,6478],{},[63,7970,7972],{"class":65,"line":7971},292,[63,7973,552],{"emptyLinePlaceholder":551},[63,7975,7977],{"class":65,"line":7976},293,[63,7978,7979],{},"mjv_moveCamera(m_, action, dx \u002F height, dy \u002F height, &scn_, &cam_);\n",[63,7981,7983],{"class":65,"line":7982},294,[63,7984,552],{"emptyLinePlaceholder":551},[63,7986,7988],{"class":65,"line":7987},295,[63,7989,6446],{},[63,7991,7993],{"class":65,"line":7992},296,[63,7994,552],{"emptyLinePlaceholder":551},[63,7996,7998],{"class":65,"line":7997},297,[63,7999,6478],{},[63,8001,8003],{"class":65,"line":8002},298,[63,8004,552],{"emptyLinePlaceholder":551},[63,8006,8008],{"class":65,"line":8007},299,[63,8009,8010],{},"\u002F\u002F ==================== 滚轮回调 ====================\n",[63,8012,8014],{"class":65,"line":8013},300,[63,8015,552],{"emptyLinePlaceholder":551},[63,8017,8019],{"class":65,"line":8018},301,[63,8020,8021],{},"void Simulator::on_scroll(double xoffset, double yoffset)\n",[63,8023,8025],{"class":65,"line":8024},302,[63,8026,552],{"emptyLinePlaceholder":551},[63,8028,8030],{"class":65,"line":8029},303,[63,8031,6304],{},[63,8033,8035],{"class":65,"line":8034},304,[63,8036,552],{"emptyLinePlaceholder":551},[63,8038,8040],{"class":65,"line":8039},305,[63,8041,8042],{},"mjv_moveCamera(m_, mjMOUSE_ZOOM, 0, -0.05 * yoffset, &scn_, &cam_);\n",[63,8044,8046],{"class":65,"line":8045},306,[63,8047,552],{"emptyLinePlaceholder":551},[63,8049,8051],{"class":65,"line":8050},307,[63,8052,6446],{},[22,8054,8055],{},[60,8056,8057],{},"simulator.h",[53,8059,8061],{"className":6235,"code":8060,"language":6237,"meta":58,"style":58},"#pragma once\n\n#include \u003Cfunctional>\n#include \u003Cmujoco\u002Fmujoco.h>\n#include \u003CGLFW\u002Fglfw3.h>\n\n  \n\nclass Simulator {\n\npublic:\n\nSimulator() = default;\n\n~Simulator();\n\n  \n\n\u002F\u002F 禁止拷贝\n\nSimulator(const Simulator&) = delete;\n\nSimulator& operator=(const Simulator&) = delete;\n\n  \n\n\u002F** 加载模型，失败返回 false *\u002F\n\nbool load_model(const char* xml_path);\n\n  \n\n\u002F** 初始化窗口和可视化 *\u002F\n\nbool init_visual(int width, int height, const char* title);\n\n  \n\n\u002F** 设置相机跟踪的 body *\u002F\n\nvoid set_camera_track(const char* body_name, double distance = 2.0);\n\n  \n\n\u002F** 注册额外的按键回调（在 Backspace 重置之后调用） *\u002F\n\nvoid set_key_handler(std::function\u003Cvoid(int key, int act)> handler) { key_handler_ = handler; }\n\n  \n\n\u002F** 进入主循环，每帧调用 update(m, d) *\u002F\n\nvoid run(std::function\u003Cvoid(mjModel*, mjData*)> update = nullptr);\n\n  \n\n\u002F** 模型和数据访问 *\u002F\n\nmjModel* model() { return m_; }\n\nmjData* data() { return d_; }\n\n  \n\nprivate:\n\n\u002F\u002F 实例回调（由静态函数转发）\n\nvoid on_key(int key, int act);\n\nvoid on_mouse_button(int button, int act);\n\nvoid on_mouse_move(double xpos, double ypos);\n\nvoid on_scroll(double xoffset, double yoffset);\n\n  \n\n\u002F** 获取当前 viewport *\u002F\n\nmjrRect get_viewport();\n\n  \n\n\u002F\u002F 静态 GLFW 回调，通过 user pointer 转发到实例\n\nstatic void key_cb(GLFWwindow* w, int k, int s, int a, int m) {\n\nauto* self = static_cast\u003CSimulator*>(glfwGetWindowUserPointer(w));\n\nself->on_key(k, a);\n\n}\n\nstatic void mouse_cb(GLFWwindow* w, int b, int a, int m) {\n\nauto* self = static_cast\u003CSimulator*>(glfwGetWindowUserPointer(w));\n\nself->on_mouse_button(b, a);\n\n}\n\nstatic void move_cb(GLFWwindow* w, double x, double y) {\n\nauto* self = static_cast\u003CSimulator*>(glfwGetWindowUserPointer(w));\n\nself->on_mouse_move(x, y);\n\n}\n\nstatic void scroll_cb(GLFWwindow* w, double xo, double yo) {\n\nauto* self = static_cast\u003CSimulator*>(glfwGetWindowUserPointer(w));\n\nself->on_scroll(xo, yo);\n\n}\n\n  \n\nbool visual_ready_ = false;\n\n  \n\nmjModel* m_ = nullptr;\n\nmjData* d_ = nullptr;\n\n  \n\nmjvCamera cam_{};\n\nmjvOption opt_{};\n\nmjvScene scn_{};\n\nmjrContext con_{};\n\nGLFWwindow* window_ = nullptr;\n\n  \n\n\u002F\u002F 外部回调\n\nstd::function\u003Cvoid(int, int)> key_handler_;\n\n  \n\n\u002F\u002F 鼠标状态\n\nbool btn_left_ = false, btn_middle_ = false, btn_right_ = false;\n\ndouble lastx_ = 0, lasty_ = 0;\n\n  \n\n\u002F\u002F 暂停 & 拖拽加力\n\nbool paused_ = false;\n\nbool perturb_active_ = false;\n\nmjvPerturb pert_{};\n\n};\n",[60,8062,8063,8068,8072,8077,8082,8087,8091,8095,8099,8104,8108,8113,8117,8122,8126,8131,8135,8139,8143,8148,8152,8157,8161,8166,8170,8174,8178,8183,8187,8192,8196,8200,8204,8209,8213,8218,8222,8226,8230,8235,8239,8244,8248,8252,8256,8261,8265,8270,8274,8278,8282,8287,8291,8296,8300,8304,8308,8313,8317,8322,8326,8331,8335,8339,8343,8348,8352,8357,8361,8366,8370,8375,8379,8384,8388,8393,8397,8401,8405,8410,8414,8419,8423,8427,8431,8436,8440,8445,8449,8454,8458,8463,8467,8471,8475,8480,8484,8488,8492,8497,8501,8505,8509,8514,8518,8522,8526,8531,8535,8539,8543,8548,8552,8556,8560,8565,8569,8573,8577,8581,8585,8590,8594,8598,8602,8607,8611,8616,8620,8624,8628,8633,8637,8642,8646,8651,8655,8660,8664,8669,8673,8677,8681,8686,8690,8695,8699,8703,8707,8712,8716,8721,8725,8730,8734,8738,8742,8747,8751,8756,8760,8765,8769,8774,8778],{"__ignoreMap":58},[63,8064,8065],{"class":65,"line":66},[63,8066,8067],{},"#pragma once\n",[63,8069,8070],{"class":65,"line":77},[63,8071,552],{"emptyLinePlaceholder":551},[63,8073,8074],{"class":65,"line":84},[63,8075,8076],{},"#include \u003Cfunctional>\n",[63,8078,8079],{"class":65,"line":95},[63,8080,8081],{},"#include \u003Cmujoco\u002Fmujoco.h>\n",[63,8083,8084],{"class":65,"line":101},[63,8085,8086],{},"#include \u003CGLFW\u002Fglfw3.h>\n",[63,8088,8089],{"class":65,"line":114},[63,8090,552],{"emptyLinePlaceholder":551},[63,8092,8093],{"class":65,"line":120},[63,8094,6478],{},[63,8096,8097],{"class":65,"line":126},[63,8098,552],{"emptyLinePlaceholder":551},[63,8100,8101],{"class":65,"line":134},[63,8102,8103],{},"class Simulator {\n",[63,8105,8106],{"class":65,"line":397},[63,8107,552],{"emptyLinePlaceholder":551},[63,8109,8110],{"class":65,"line":403},[63,8111,8112],{},"public:\n",[63,8114,8115],{"class":65,"line":421},[63,8116,552],{"emptyLinePlaceholder":551},[63,8118,8119],{"class":65,"line":427},[63,8120,8121],{},"Simulator() = default;\n",[63,8123,8124],{"class":65,"line":651},[63,8125,552],{"emptyLinePlaceholder":551},[63,8127,8128],{"class":65,"line":657},[63,8129,8130],{},"~Simulator();\n",[63,8132,8133],{"class":65,"line":681},[63,8134,552],{"emptyLinePlaceholder":551},[63,8136,8137],{"class":65,"line":687},[63,8138,6478],{},[63,8140,8141],{"class":65,"line":692},[63,8142,552],{"emptyLinePlaceholder":551},[63,8144,8145],{"class":65,"line":698},[63,8146,8147],{},"\u002F\u002F 禁止拷贝\n",[63,8149,8150],{"class":65,"line":731},[63,8151,552],{"emptyLinePlaceholder":551},[63,8153,8154],{"class":65,"line":760},[63,8155,8156],{},"Simulator(const Simulator&) = delete;\n",[63,8158,8159],{"class":65,"line":796},[63,8160,552],{"emptyLinePlaceholder":551},[63,8162,8163],{"class":65,"line":830},[63,8164,8165],{},"Simulator& operator=(const Simulator&) = delete;\n",[63,8167,8168],{"class":65,"line":845},[63,8169,552],{"emptyLinePlaceholder":551},[63,8171,8172],{"class":65,"line":865},[63,8173,6478],{},[63,8175,8176],{"class":65,"line":870},[63,8177,552],{"emptyLinePlaceholder":551},[63,8179,8180],{"class":65,"line":882},[63,8181,8182],{},"\u002F** 加载模型，失败返回 false *\u002F\n",[63,8184,8185],{"class":65,"line":904},[63,8186,552],{"emptyLinePlaceholder":551},[63,8188,8189],{"class":65,"line":909},[63,8190,8191],{},"bool load_model(const char* xml_path);\n",[63,8193,8194],{"class":65,"line":928},[63,8195,552],{"emptyLinePlaceholder":551},[63,8197,8198],{"class":65,"line":937},[63,8199,6478],{},[63,8201,8202],{"class":65,"line":953},[63,8203,552],{"emptyLinePlaceholder":551},[63,8205,8206],{"class":65,"line":973},[63,8207,8208],{},"\u002F** 初始化窗口和可视化 *\u002F\n",[63,8210,8211],{"class":65,"line":6421},[63,8212,552],{"emptyLinePlaceholder":551},[63,8214,8215],{"class":65,"line":6426},[63,8216,8217],{},"bool init_visual(int width, int height, const char* title);\n",[63,8219,8220],{"class":65,"line":6432},[63,8221,552],{"emptyLinePlaceholder":551},[63,8223,8224],{"class":65,"line":6438},[63,8225,6478],{},[63,8227,8228],{"class":65,"line":6443},[63,8229,552],{"emptyLinePlaceholder":551},[63,8231,8232],{"class":65,"line":6626},[63,8233,8234],{},"\u002F** 设置相机跟踪的 body *\u002F\n",[63,8236,8237],{"class":65,"line":6632},[63,8238,552],{"emptyLinePlaceholder":551},[63,8240,8241],{"class":65,"line":6637},[63,8242,8243],{},"void set_camera_track(const char* body_name, double distance = 2.0);\n",[63,8245,8246],{"class":65,"line":6642},[63,8247,552],{"emptyLinePlaceholder":551},[63,8249,8250],{"class":65,"line":6647},[63,8251,6478],{},[63,8253,8254],{"class":65,"line":6652},[63,8255,552],{"emptyLinePlaceholder":551},[63,8257,8258],{"class":65,"line":6657},[63,8259,8260],{},"\u002F** 注册额外的按键回调（在 Backspace 重置之后调用） *\u002F\n",[63,8262,8263],{"class":65,"line":6663},[63,8264,552],{"emptyLinePlaceholder":551},[63,8266,8267],{"class":65,"line":6668},[63,8268,8269],{},"void set_key_handler(std::function\u003Cvoid(int key, int act)> handler) { key_handler_ = handler; }\n",[63,8271,8272],{"class":65,"line":6674},[63,8273,552],{"emptyLinePlaceholder":551},[63,8275,8276],{"class":65,"line":6679},[63,8277,6478],{},[63,8279,8280],{"class":65,"line":6685},[63,8281,552],{"emptyLinePlaceholder":551},[63,8283,8284],{"class":65,"line":6690},[63,8285,8286],{},"\u002F** 进入主循环，每帧调用 update(m, d) *\u002F\n",[63,8288,8289],{"class":65,"line":6696},[63,8290,552],{"emptyLinePlaceholder":551},[63,8292,8293],{"class":65,"line":6701},[63,8294,8295],{},"void run(std::function\u003Cvoid(mjModel*, mjData*)> update = nullptr);\n",[63,8297,8298],{"class":65,"line":6706},[63,8299,552],{"emptyLinePlaceholder":551},[63,8301,8302],{"class":65,"line":6711},[63,8303,6478],{},[63,8305,8306],{"class":65,"line":6717},[63,8307,552],{"emptyLinePlaceholder":551},[63,8309,8310],{"class":65,"line":6722},[63,8311,8312],{},"\u002F** 模型和数据访问 *\u002F\n",[63,8314,8315],{"class":65,"line":6728},[63,8316,552],{"emptyLinePlaceholder":551},[63,8318,8319],{"class":65,"line":6733},[63,8320,8321],{},"mjModel* model() { return m_; }\n",[63,8323,8324],{"class":65,"line":6738},[63,8325,552],{"emptyLinePlaceholder":551},[63,8327,8328],{"class":65,"line":6743},[63,8329,8330],{},"mjData* data() { return d_; }\n",[63,8332,8333],{"class":65,"line":6748},[63,8334,552],{"emptyLinePlaceholder":551},[63,8336,8337],{"class":65,"line":6753},[63,8338,6478],{},[63,8340,8341],{"class":65,"line":6759},[63,8342,552],{"emptyLinePlaceholder":551},[63,8344,8345],{"class":65,"line":6764},[63,8346,8347],{},"private:\n",[63,8349,8350],{"class":65,"line":6770},[63,8351,552],{"emptyLinePlaceholder":551},[63,8353,8354],{"class":65,"line":6775},[63,8355,8356],{},"\u002F\u002F 实例回调（由静态函数转发）\n",[63,8358,8359],{"class":65,"line":6780},[63,8360,552],{"emptyLinePlaceholder":551},[63,8362,8363],{"class":65,"line":6785},[63,8364,8365],{},"void on_key(int key, int act);\n",[63,8367,8368],{"class":65,"line":6791},[63,8369,552],{"emptyLinePlaceholder":551},[63,8371,8372],{"class":65,"line":6796},[63,8373,8374],{},"void on_mouse_button(int button, int act);\n",[63,8376,8377],{"class":65,"line":6802},[63,8378,552],{"emptyLinePlaceholder":551},[63,8380,8381],{"class":65,"line":6807},[63,8382,8383],{},"void on_mouse_move(double xpos, double ypos);\n",[63,8385,8386],{"class":65,"line":6812},[63,8387,552],{"emptyLinePlaceholder":551},[63,8389,8390],{"class":65,"line":6817},[63,8391,8392],{},"void on_scroll(double xoffset, double yoffset);\n",[63,8394,8395],{"class":65,"line":6822},[63,8396,552],{"emptyLinePlaceholder":551},[63,8398,8399],{"class":65,"line":6827},[63,8400,6478],{},[63,8402,8403],{"class":65,"line":6832},[63,8404,552],{"emptyLinePlaceholder":551},[63,8406,8407],{"class":65,"line":6837},[63,8408,8409],{},"\u002F** 获取当前 viewport *\u002F\n",[63,8411,8412],{"class":65,"line":6843},[63,8413,552],{"emptyLinePlaceholder":551},[63,8415,8416],{"class":65,"line":6848},[63,8417,8418],{},"mjrRect get_viewport();\n",[63,8420,8421],{"class":65,"line":6854},[63,8422,552],{"emptyLinePlaceholder":551},[63,8424,8425],{"class":65,"line":6859},[63,8426,6478],{},[63,8428,8429],{"class":65,"line":6865},[63,8430,552],{"emptyLinePlaceholder":551},[63,8432,8433],{"class":65,"line":6870},[63,8434,8435],{},"\u002F\u002F 静态 GLFW 回调，通过 user pointer 转发到实例\n",[63,8437,8438],{"class":65,"line":6875},[63,8439,552],{"emptyLinePlaceholder":551},[63,8441,8442],{"class":65,"line":6880},[63,8443,8444],{},"static void key_cb(GLFWwindow* w, int k, int s, int a, int m) {\n",[63,8446,8447],{"class":65,"line":6885},[63,8448,552],{"emptyLinePlaceholder":551},[63,8450,8451],{"class":65,"line":6890},[63,8452,8453],{},"auto* self = static_cast\u003CSimulator*>(glfwGetWindowUserPointer(w));\n",[63,8455,8456],{"class":65,"line":6895},[63,8457,552],{"emptyLinePlaceholder":551},[63,8459,8460],{"class":65,"line":6900},[63,8461,8462],{},"self->on_key(k, a);\n",[63,8464,8465],{"class":65,"line":6906},[63,8466,552],{"emptyLinePlaceholder":551},[63,8468,8469],{"class":65,"line":6911},[63,8470,6446],{},[63,8472,8473],{"class":65,"line":6917},[63,8474,552],{"emptyLinePlaceholder":551},[63,8476,8477],{"class":65,"line":6922},[63,8478,8479],{},"static void mouse_cb(GLFWwindow* w, int b, int a, int m) {\n",[63,8481,8482],{"class":65,"line":6927},[63,8483,552],{"emptyLinePlaceholder":551},[63,8485,8486],{"class":65,"line":6932},[63,8487,8453],{},[63,8489,8490],{"class":65,"line":6938},[63,8491,552],{"emptyLinePlaceholder":551},[63,8493,8494],{"class":65,"line":6943},[63,8495,8496],{},"self->on_mouse_button(b, a);\n",[63,8498,8499],{"class":65,"line":6949},[63,8500,552],{"emptyLinePlaceholder":551},[63,8502,8503],{"class":65,"line":6954},[63,8504,6446],{},[63,8506,8507],{"class":65,"line":6959},[63,8508,552],{"emptyLinePlaceholder":551},[63,8510,8511],{"class":65,"line":6964},[63,8512,8513],{},"static void move_cb(GLFWwindow* w, double x, double y) {\n",[63,8515,8516],{"class":65,"line":6970},[63,8517,552],{"emptyLinePlaceholder":551},[63,8519,8520],{"class":65,"line":6975},[63,8521,8453],{},[63,8523,8524],{"class":65,"line":6981},[63,8525,552],{"emptyLinePlaceholder":551},[63,8527,8528],{"class":65,"line":6986},[63,8529,8530],{},"self->on_mouse_move(x, y);\n",[63,8532,8533],{"class":65,"line":6992},[63,8534,552],{"emptyLinePlaceholder":551},[63,8536,8537],{"class":65,"line":6997},[63,8538,6446],{},[63,8540,8541],{"class":65,"line":7003},[63,8542,552],{"emptyLinePlaceholder":551},[63,8544,8545],{"class":65,"line":7008},[63,8546,8547],{},"static void scroll_cb(GLFWwindow* w, double xo, double yo) {\n",[63,8549,8550],{"class":65,"line":7014},[63,8551,552],{"emptyLinePlaceholder":551},[63,8553,8554],{"class":65,"line":7019},[63,8555,8453],{},[63,8557,8558],{"class":65,"line":7024},[63,8559,552],{"emptyLinePlaceholder":551},[63,8561,8562],{"class":65,"line":7029},[63,8563,8564],{},"self->on_scroll(xo, yo);\n",[63,8566,8567],{"class":65,"line":7035},[63,8568,552],{"emptyLinePlaceholder":551},[63,8570,8571],{"class":65,"line":7040},[63,8572,6446],{},[63,8574,8575],{"class":65,"line":7046},[63,8576,552],{"emptyLinePlaceholder":551},[63,8578,8579],{"class":65,"line":7051},[63,8580,6478],{},[63,8582,8583],{"class":65,"line":7057},[63,8584,552],{"emptyLinePlaceholder":551},[63,8586,8587],{"class":65,"line":7062},[63,8588,8589],{},"bool visual_ready_ = false;\n",[63,8591,8592],{"class":65,"line":7068},[63,8593,552],{"emptyLinePlaceholder":551},[63,8595,8596],{"class":65,"line":7073},[63,8597,6478],{},[63,8599,8600],{"class":65,"line":7079},[63,8601,552],{"emptyLinePlaceholder":551},[63,8603,8604],{"class":65,"line":7084},[63,8605,8606],{},"mjModel* m_ = nullptr;\n",[63,8608,8609],{"class":65,"line":7089},[63,8610,552],{"emptyLinePlaceholder":551},[63,8612,8613],{"class":65,"line":7094},[63,8614,8615],{},"mjData* d_ = nullptr;\n",[63,8617,8618],{"class":65,"line":7100},[63,8619,552],{"emptyLinePlaceholder":551},[63,8621,8622],{"class":65,"line":7105},[63,8623,6478],{},[63,8625,8626],{"class":65,"line":7111},[63,8627,552],{"emptyLinePlaceholder":551},[63,8629,8630],{"class":65,"line":7116},[63,8631,8632],{},"mjvCamera cam_{};\n",[63,8634,8635],{"class":65,"line":7121},[63,8636,552],{"emptyLinePlaceholder":551},[63,8638,8639],{"class":65,"line":7126},[63,8640,8641],{},"mjvOption opt_{};\n",[63,8643,8644],{"class":65,"line":7132},[63,8645,552],{"emptyLinePlaceholder":551},[63,8647,8648],{"class":65,"line":7137},[63,8649,8650],{},"mjvScene scn_{};\n",[63,8652,8653],{"class":65,"line":7142},[63,8654,552],{"emptyLinePlaceholder":551},[63,8656,8657],{"class":65,"line":7147},[63,8658,8659],{},"mjrContext con_{};\n",[63,8661,8662],{"class":65,"line":7152},[63,8663,552],{"emptyLinePlaceholder":551},[63,8665,8666],{"class":65,"line":7157},[63,8667,8668],{},"GLFWwindow* window_ = nullptr;\n",[63,8670,8671],{"class":65,"line":7162},[63,8672,552],{"emptyLinePlaceholder":551},[63,8674,8675],{"class":65,"line":7167},[63,8676,6478],{},[63,8678,8679],{"class":65,"line":7173},[63,8680,552],{"emptyLinePlaceholder":551},[63,8682,8683],{"class":65,"line":7178},[63,8684,8685],{},"\u002F\u002F 外部回调\n",[63,8687,8688],{"class":65,"line":7184},[63,8689,552],{"emptyLinePlaceholder":551},[63,8691,8692],{"class":65,"line":7189},[63,8693,8694],{},"std::function\u003Cvoid(int, int)> key_handler_;\n",[63,8696,8697],{"class":65,"line":7194},[63,8698,552],{"emptyLinePlaceholder":551},[63,8700,8701],{"class":65,"line":7199},[63,8702,6478],{},[63,8704,8705],{"class":65,"line":7205},[63,8706,552],{"emptyLinePlaceholder":551},[63,8708,8709],{"class":65,"line":7210},[63,8710,8711],{},"\u002F\u002F 鼠标状态\n",[63,8713,8714],{"class":65,"line":7216},[63,8715,552],{"emptyLinePlaceholder":551},[63,8717,8718],{"class":65,"line":7221},[63,8719,8720],{},"bool btn_left_ = false, btn_middle_ = false, btn_right_ = false;\n",[63,8722,8723],{"class":65,"line":7227},[63,8724,552],{"emptyLinePlaceholder":551},[63,8726,8727],{"class":65,"line":7232},[63,8728,8729],{},"double lastx_ = 0, lasty_ = 0;\n",[63,8731,8732],{"class":65,"line":7237},[63,8733,552],{"emptyLinePlaceholder":551},[63,8735,8736],{"class":65,"line":7242},[63,8737,6478],{},[63,8739,8740],{"class":65,"line":7247},[63,8741,552],{"emptyLinePlaceholder":551},[63,8743,8744],{"class":65,"line":7252},[63,8745,8746],{},"\u002F\u002F 暂停 & 拖拽加力\n",[63,8748,8749],{"class":65,"line":7258},[63,8750,552],{"emptyLinePlaceholder":551},[63,8752,8753],{"class":65,"line":7263},[63,8754,8755],{},"bool paused_ = false;\n",[63,8757,8758],{"class":65,"line":7269},[63,8759,552],{"emptyLinePlaceholder":551},[63,8761,8762],{"class":65,"line":7274},[63,8763,8764],{},"bool perturb_active_ = false;\n",[63,8766,8767],{"class":65,"line":7279},[63,8768,552],{"emptyLinePlaceholder":551},[63,8770,8771],{"class":65,"line":7284},[63,8772,8773],{},"mjvPerturb pert_{};\n",[63,8775,8776],{"class":65,"line":7290},[63,8777,552],{"emptyLinePlaceholder":551},[63,8779,8780],{"class":65,"line":7295},[63,8781,8782],{},"};\n",[1035,8784,8786],{"id":8785},"_3-使用官方的simulator拥有官方的simulator界面按钮","3. 使用官方的simulator（拥有官方的simulator界面按钮）",[1776,8788,8789,8804],{},[1779,8790,8791,8792,8795,8796,8799,8800],{},"将simulator文件夹下的所有文件复制到自己的工程文件下面",[60,8793,8794],{},"src\u002F","  除了",[60,8797,8798],{},"cmake\u002F"," 文件夹之外的文件\n",[25,8801],{"alt":8802,"src":8803},"598","\u002Ffongtszho.web\u002Fwiki-assets\u002Fpictures-pasted-image-20260721231329.png",[1779,8805,8806,8807],{},"更改",[60,8808,8809],{},"CMakeListst.txt",[53,8811,8814],{"className":8812,"code":8813,"language":6078,"meta":58,"style":58},"language-cmake shiki shiki-themes github-light github-dark","cmake_minimum_required(VERSION 3.20)\nproject(工程名 LANGUAGES CXX)\n\n# C++17\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\nset(CMAKE_EXPORT_COMPILE_COMMANDS ON)\n# MuJoCo 安装目录（此处替换为自己的安装目录）\nset(MUJOCO_PATH \"\u002Fhome\u002Fxiaofang\u002FApplications\u002Fmujoco-3.7.0\")\n\ninclude_directories(\n    ${MUJOCO_PATH}\u002Finclude\n)\n\nlink_directories(\n    ${MUJOCO_PATH}\u002Flib\n)\n\nset(MUJOCO_LIB\n    ${MUJOCO_PATH}\u002Flib\u002Flibmujoco.so\n)\n\n# 官方 Simulator 源码\nfile(GLOB SIMULATOR_SRC\n${CMAKE_CURRENT_SOURCE_DIR}\u002Fsrc\u002Fsimulator\u002F*.cc\n)\n# 用户控制代码\nset(USER_SRC\nsrc\u002Fcontrol\u002Fcontrol.cpp\nsrc\u002Fcontrol\u002Fpid.cpp\nsrc\u002Fsensors\u002Fimu.cpp\n)\n\n# 最终程序\nadd_executable(WheelLeg\n${SIMULATOR_SRC}\n${USER_SRC}\n)\n\ntarget_include_directories(WheelLeg PRIVATE\n\n${CMAKE_SOURCE_DIR}\u002Finclude\n${CMAKE_CURRENT_SOURCE_DIR}\u002Fsrc\u002Fsimulator\n${MUJOCO_PATH}\u002Finclude\n\n)\n\ntarget_link_libraries(WheelLeg\n\n${MUJOCO_LIB}\nglfw\nGL\nGLU\n)\n",[60,8815,8816,8821,8826,8830,8835,8840,8845,8850,8855,8860,8864,8869,8874,8878,8882,8887,8892,8896,8900,8905,8910,8914,8918,8923,8928,8933,8937,8942,8947,8952,8957,8962,8966,8970,8975,8980,8985,8990,8994,8998,9003,9007,9012,9017,9022,9026,9030,9034,9039,9043,9048,9053,9058,9063],{"__ignoreMap":58},[63,8817,8818],{"class":65,"line":66},[63,8819,8820],{},"cmake_minimum_required(VERSION 3.20)\n",[63,8822,8823],{"class":65,"line":77},[63,8824,8825],{},"project(工程名 LANGUAGES CXX)\n",[63,8827,8828],{"class":65,"line":84},[63,8829,552],{"emptyLinePlaceholder":551},[63,8831,8832],{"class":65,"line":95},[63,8833,8834],{},"# C++17\n",[63,8836,8837],{"class":65,"line":101},[63,8838,8839],{},"set(CMAKE_CXX_STANDARD 17)\n",[63,8841,8842],{"class":65,"line":114},[63,8843,8844],{},"set(CMAKE_CXX_STANDARD_REQUIRED ON)\n",[63,8846,8847],{"class":65,"line":120},[63,8848,8849],{},"set(CMAKE_EXPORT_COMPILE_COMMANDS ON)\n",[63,8851,8852],{"class":65,"line":126},[63,8853,8854],{},"# MuJoCo 安装目录（此处替换为自己的安装目录）\n",[63,8856,8857],{"class":65,"line":134},[63,8858,8859],{},"set(MUJOCO_PATH \"\u002Fhome\u002Fxiaofang\u002FApplications\u002Fmujoco-3.7.0\")\n",[63,8861,8862],{"class":65,"line":397},[63,8863,552],{"emptyLinePlaceholder":551},[63,8865,8866],{"class":65,"line":403},[63,8867,8868],{},"include_directories(\n",[63,8870,8871],{"class":65,"line":421},[63,8872,8873],{},"    ${MUJOCO_PATH}\u002Finclude\n",[63,8875,8876],{"class":65,"line":427},[63,8877,2173],{},[63,8879,8880],{"class":65,"line":651},[63,8881,552],{"emptyLinePlaceholder":551},[63,8883,8884],{"class":65,"line":657},[63,8885,8886],{},"link_directories(\n",[63,8888,8889],{"class":65,"line":681},[63,8890,8891],{},"    ${MUJOCO_PATH}\u002Flib\n",[63,8893,8894],{"class":65,"line":687},[63,8895,2173],{},[63,8897,8898],{"class":65,"line":692},[63,8899,552],{"emptyLinePlaceholder":551},[63,8901,8902],{"class":65,"line":698},[63,8903,8904],{},"set(MUJOCO_LIB\n",[63,8906,8907],{"class":65,"line":731},[63,8908,8909],{},"    ${MUJOCO_PATH}\u002Flib\u002Flibmujoco.so\n",[63,8911,8912],{"class":65,"line":760},[63,8913,2173],{},[63,8915,8916],{"class":65,"line":796},[63,8917,552],{"emptyLinePlaceholder":551},[63,8919,8920],{"class":65,"line":830},[63,8921,8922],{},"# 官方 Simulator 源码\n",[63,8924,8925],{"class":65,"line":845},[63,8926,8927],{},"file(GLOB SIMULATOR_SRC\n",[63,8929,8930],{"class":65,"line":865},[63,8931,8932],{},"${CMAKE_CURRENT_SOURCE_DIR}\u002Fsrc\u002Fsimulator\u002F*.cc\n",[63,8934,8935],{"class":65,"line":870},[63,8936,2173],{},[63,8938,8939],{"class":65,"line":882},[63,8940,8941],{},"# 用户控制代码\n",[63,8943,8944],{"class":65,"line":904},[63,8945,8946],{},"set(USER_SRC\n",[63,8948,8949],{"class":65,"line":909},[63,8950,8951],{},"src\u002Fcontrol\u002Fcontrol.cpp\n",[63,8953,8954],{"class":65,"line":928},[63,8955,8956],{},"src\u002Fcontrol\u002Fpid.cpp\n",[63,8958,8959],{"class":65,"line":937},[63,8960,8961],{},"src\u002Fsensors\u002Fimu.cpp\n",[63,8963,8964],{"class":65,"line":953},[63,8965,2173],{},[63,8967,8968],{"class":65,"line":973},[63,8969,552],{"emptyLinePlaceholder":551},[63,8971,8972],{"class":65,"line":6421},[63,8973,8974],{},"# 最终程序\n",[63,8976,8977],{"class":65,"line":6426},[63,8978,8979],{},"add_executable(WheelLeg\n",[63,8981,8982],{"class":65,"line":6432},[63,8983,8984],{},"${SIMULATOR_SRC}\n",[63,8986,8987],{"class":65,"line":6438},[63,8988,8989],{},"${USER_SRC}\n",[63,8991,8992],{"class":65,"line":6443},[63,8993,2173],{},[63,8995,8996],{"class":65,"line":6626},[63,8997,552],{"emptyLinePlaceholder":551},[63,8999,9000],{"class":65,"line":6632},[63,9001,9002],{},"target_include_directories(WheelLeg PRIVATE\n",[63,9004,9005],{"class":65,"line":6637},[63,9006,552],{"emptyLinePlaceholder":551},[63,9008,9009],{"class":65,"line":6642},[63,9010,9011],{},"${CMAKE_SOURCE_DIR}\u002Finclude\n",[63,9013,9014],{"class":65,"line":6647},[63,9015,9016],{},"${CMAKE_CURRENT_SOURCE_DIR}\u002Fsrc\u002Fsimulator\n",[63,9018,9019],{"class":65,"line":6652},[63,9020,9021],{},"${MUJOCO_PATH}\u002Finclude\n",[63,9023,9024],{"class":65,"line":6657},[63,9025,552],{"emptyLinePlaceholder":551},[63,9027,9028],{"class":65,"line":6663},[63,9029,2173],{},[63,9031,9032],{"class":65,"line":6668},[63,9033,552],{"emptyLinePlaceholder":551},[63,9035,9036],{"class":65,"line":6674},[63,9037,9038],{},"target_link_libraries(WheelLeg\n",[63,9040,9041],{"class":65,"line":6679},[63,9042,552],{"emptyLinePlaceholder":551},[63,9044,9045],{"class":65,"line":6685},[63,9046,9047],{},"${MUJOCO_LIB}\n",[63,9049,9050],{"class":65,"line":6690},[63,9051,9052],{},"glfw\n",[63,9054,9055],{"class":65,"line":6696},[63,9056,9057],{},"GL\n",[63,9059,9060],{"class":65,"line":6701},[63,9061,9062],{},"GLU\n",[63,9064,9065],{"class":65,"line":6706},[63,9066,2173],{},[1776,9068,9069],{"start":84},[1779,9070,9071],{},"更改官方main.cc",[53,9073,9075],{"className":6235,"code":9074,"language":6237,"meta":58,"style":58},"\nvoid PhysicsLoop(mj::Simulate& sim) {\n...\n    #在这里面加入用户循环控制程序入口 例如\n    carController.Main_Control_Update(m, d);\n    mj_step(m, d);\n...\n}\n\nvoid PhysicsThread(mj::Simulate* sim, const char* filename){\n...\n\nmj_forward(m, d);\n\n\u002F\u002F在这里加入用户控制器的初始化\ncarController.Init(m);\n\n...\n}\n\n\n",[60,9076,9077,9081,9086,9091,9096,9101,9106,9110,9114,9118,9123,9127,9131,9136,9140,9145,9150,9154,9158],{"__ignoreMap":58},[63,9078,9079],{"class":65,"line":66},[63,9080,552],{"emptyLinePlaceholder":551},[63,9082,9083],{"class":65,"line":77},[63,9084,9085],{},"void PhysicsLoop(mj::Simulate& sim) {\n",[63,9087,9088],{"class":65,"line":84},[63,9089,9090],{},"...\n",[63,9092,9093],{"class":65,"line":95},[63,9094,9095],{},"    #在这里面加入用户循环控制程序入口 例如\n",[63,9097,9098],{"class":65,"line":101},[63,9099,9100],{},"    carController.Main_Control_Update(m, d);\n",[63,9102,9103],{"class":65,"line":114},[63,9104,9105],{},"    mj_step(m, d);\n",[63,9107,9108],{"class":65,"line":120},[63,9109,9090],{},[63,9111,9112],{"class":65,"line":126},[63,9113,6446],{},[63,9115,9116],{"class":65,"line":134},[63,9117,552],{"emptyLinePlaceholder":551},[63,9119,9120],{"class":65,"line":397},[63,9121,9122],{},"void PhysicsThread(mj::Simulate* sim, const char* filename){\n",[63,9124,9125],{"class":65,"line":403},[63,9126,9090],{},[63,9128,9129],{"class":65,"line":421},[63,9130,552],{"emptyLinePlaceholder":551},[63,9132,9133],{"class":65,"line":427},[63,9134,9135],{},"mj_forward(m, d);\n",[63,9137,9138],{"class":65,"line":651},[63,9139,552],{"emptyLinePlaceholder":551},[63,9141,9142],{"class":65,"line":657},[63,9143,9144],{},"\u002F\u002F在这里加入用户控制器的初始化\n",[63,9146,9147],{"class":65,"line":681},[63,9148,9149],{},"carController.Init(m);\n",[63,9151,9152],{"class":65,"line":687},[63,9153,552],{"emptyLinePlaceholder":551},[63,9155,9156],{"class":65,"line":692},[63,9157,9090],{},[63,9159,9160],{"class":65,"line":698},[63,9161,6446],{},[1776,9163,9164],{"start":95},[1779,9165,9166,9167,9170],{},"启动方式 （此处使用fish）\n新建 ",[60,9168,9169],{},"scripts\u002Frun.fish"," 写入以下内容",[53,9172,9174],{"className":1908,"code":9173,"language":1057,"meta":58,"style":58},"#!\u002Fusr\u002Fbin\u002Fenv fish\ncd ..\u002Fbuild\necho \"========== Build ==========\"\n\nmake\n\nor begin\n\necho \"编译失败\"\n\nexit 1\n\nend\n\necho \"========== Run ==========\"\n#启动程序，设置环境变量以启用 NVIDIA GPU 的渲染加速\n\nenv \\\n\n__NV_PRIME_RENDER_OFFLOAD=1 \\\n\n__GLX_VENDOR_LIBRARY_NAME=nvidia \\\n\nMUJOCO_GL=egl \\\n\n..\u002Fbuild\u002FWheelLeg ..\u002Fmodels\u002Fmodel.xml\n\n",[60,9175,9176,9181,9188,9196,9200,9205,9209,9216,9220,9227,9231,9239,9243,9248,9252,9259,9264,9268,9275,9279,9287,9291,9298,9302,9309,9313],{"__ignoreMap":58},[63,9177,9178],{"class":65,"line":66},[63,9179,9180],{"class":80},"#!\u002Fusr\u002Fbin\u002Fenv fish\n",[63,9182,9183,9185],{"class":65,"line":77},[63,9184,1596],{"class":137},[63,9186,9187],{"class":73}," ..\u002Fbuild\n",[63,9189,9190,9193],{"class":65,"line":84},[63,9191,9192],{"class":137},"echo",[63,9194,9195],{"class":73}," \"========== Build ==========\"\n",[63,9197,9198],{"class":65,"line":95},[63,9199,552],{"emptyLinePlaceholder":551},[63,9201,9202],{"class":65,"line":101},[63,9203,9204],{"class":69},"make\n",[63,9206,9207],{"class":65,"line":114},[63,9208,552],{"emptyLinePlaceholder":551},[63,9210,9211,9213],{"class":65,"line":120},[63,9212,833],{"class":69},[63,9214,9215],{"class":73}," begin\n",[63,9217,9218],{"class":65,"line":126},[63,9219,552],{"emptyLinePlaceholder":551},[63,9221,9222,9224],{"class":65,"line":134},[63,9223,9192],{"class":137},[63,9225,9226],{"class":73}," \"编译失败\"\n",[63,9228,9229],{"class":65,"line":397},[63,9230,552],{"emptyLinePlaceholder":551},[63,9232,9233,9236],{"class":65,"line":403},[63,9234,9235],{"class":137},"exit",[63,9237,9238],{"class":137}," 1\n",[63,9240,9241],{"class":65,"line":421},[63,9242,552],{"emptyLinePlaceholder":551},[63,9244,9245],{"class":65,"line":427},[63,9246,9247],{"class":412},"end\n",[63,9249,9250],{"class":65,"line":651},[63,9251,552],{"emptyLinePlaceholder":551},[63,9253,9254,9256],{"class":65,"line":657},[63,9255,9192],{"class":137},[63,9257,9258],{"class":73}," \"========== Run ==========\"\n",[63,9260,9261],{"class":65,"line":681},[63,9262,9263],{"class":80},"#启动程序，设置环境变量以启用 NVIDIA GPU 的渲染加速\n",[63,9265,9266],{"class":65,"line":687},[63,9267,552],{"emptyLinePlaceholder":551},[63,9269,9270,9273],{"class":65,"line":692},[63,9271,9272],{"class":69},"env",[63,9274,1129],{"class":137},[63,9276,9277],{"class":65,"line":698},[63,9278,552],{"emptyLinePlaceholder":551},[63,9280,9281,9284],{"class":65,"line":731},[63,9282,9283],{"class":110},"__NV_PRIME_RENDER_OFFLOAD=1 ",[63,9285,9286],{"class":137},"\\\n",[63,9288,9289],{"class":65,"line":760},[63,9290,552],{"emptyLinePlaceholder":551},[63,9292,9293,9296],{"class":65,"line":796},[63,9294,9295],{"class":110},"__GLX_VENDOR_LIBRARY_NAME=nvidia ",[63,9297,9286],{"class":137},[63,9299,9300],{"class":65,"line":830},[63,9301,552],{"emptyLinePlaceholder":551},[63,9303,9304,9307],{"class":65,"line":845},[63,9305,9306],{"class":110},"MUJOCO_GL=egl ",[63,9308,9286],{"class":137},[63,9310,9311],{"class":65,"line":865},[63,9312,552],{"emptyLinePlaceholder":551},[63,9314,9315,9318],{"class":65,"line":870},[63,9316,9317],{"class":110},"..\u002Fbuild\u002FWheelLeg ",[63,9319,9320],{"class":73},"..\u002Fmodels\u002Fmodel.xml\n",[17,9322,9323],{"id":9323},"问题专项",[1035,9325,9327],{"id":9326},"一解决方针启动卡顿问题","一、解决方针启动卡顿问题",[22,9329,9330],{},"（此处使用fish，bash等其他shell同理）",[1895,9332,9333,9336],{},[1779,9334,9335],{},"原因:没有使用nvidia显卡启动仿真",[1779,9337,9338],{},"新建run.fish在里面写运行程序的脚本",[53,9340,9342],{"className":1908,"code":9341,"language":1057,"meta":58,"style":58},"#!\u002Fusr\u002Fbin\u002Fenv fish\nenv \\\n\n__NV_PRIME_RENDER_OFFLOAD=1 \\\n\n__GLX_VENDOR_LIBRARY_NAME=nvidia \\\n\nMUJOCO_GL=glx \\\n\n..\u002Fbuild\u002Fdemo编译后生成的可执行文件\n",[60,9343,9344,9348,9354,9358,9364,9368,9374,9378,9385,9389],{"__ignoreMap":58},[63,9345,9346],{"class":65,"line":66},[63,9347,9180],{"class":80},[63,9349,9350,9352],{"class":65,"line":77},[63,9351,9272],{"class":69},[63,9353,1129],{"class":137},[63,9355,9356],{"class":65,"line":84},[63,9357,552],{"emptyLinePlaceholder":551},[63,9359,9360,9362],{"class":65,"line":95},[63,9361,9283],{"class":110},[63,9363,9286],{"class":137},[63,9365,9366],{"class":65,"line":101},[63,9367,552],{"emptyLinePlaceholder":551},[63,9369,9370,9372],{"class":65,"line":114},[63,9371,9295],{"class":110},[63,9373,9286],{"class":137},[63,9375,9376],{"class":65,"line":120},[63,9377,552],{"emptyLinePlaceholder":551},[63,9379,9380,9383],{"class":65,"line":126},[63,9381,9382],{"class":110},"MUJOCO_GL=glx ",[63,9384,9286],{"class":137},[63,9386,9387],{"class":65,"line":134},[63,9388,552],{"emptyLinePlaceholder":551},[63,9390,9391],{"class":65,"line":397},[63,9392,9393],{"class":110},"..\u002Fbuild\u002Fdemo编译后生成的可执行文件\n",[1995,9395,9396],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}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);}",{"title":58,"searchDepth":95,"depth":95,"links":9398},[9399,9405,9408],{"id":5463,"depth":77,"text":5464,"children":9400},[9401,9402,9404],{"id":5555,"depth":84,"text":5556},{"id":5851,"depth":84,"text":9403},"1.2 使用 Python pip 安装",{"id":5964,"depth":84,"text":5965},{"id":6160,"depth":77,"text":6161,"children":9406},[9407],{"id":6164,"depth":84,"text":6165},{"id":6220,"depth":77,"text":6221,"children":9409},[9410,9415],{"id":6224,"depth":84,"text":6225,"children":9411},[9412,9413,9414],{"id":6228,"depth":95,"text":6229},{"id":6261,"depth":95,"text":6262},{"id":8785,"depth":95,"text":8786},{"id":9323,"depth":84,"text":9323,"children":9416},[9417],{"id":9326,"depth":95,"text":9327},"Robotics","记录学习Mujoco的过程",{},"\u002Fwiki\u002Frobotics\u002Fmujoco\u002Fmujoco-28267cc",{"title":5434,"description":9419},"wiki\u002Frobotics\u002Fmujoco\u002Fmujoco-28267cc",[9418],"LEfWDKC0Jw8Kesro5Rwz_s1q8L3S1WlYhOmowiYc24I",1792730445135]