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