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