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