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