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