跳到正文

部落格

Linux下從工作列啟動VS Code時Codex外掛打不開的解決方法

約 3 分鐘閱讀

本文由簡體中文內容確定性轉換,並受版本化術語表保護。

1.問題現象

在Linux桌面環境中,我遇到了一個很奇怪的問題:

  • 在終端執行code .啟動VS Code,Codex外掛可以正常開啟;
  • 點選KDE工作列中的VS Code圖示啟動,Codex外掛卻無法正常進入。

如果你也遇到了“同一個VS Code,終端啟動正常,工作列啟動異常”的情況,可以先檢查兩種啟動方式實際執行的程式是否相同。

2.兩種啟動方式的區別

在我的系統中,VS Code安裝後存在下面兩個入口:

/usr/share/code/code
/usr/bin/code

它們看起來都能啟動VS Code,但實際用途並不完全相同。

2.1./usr/share/code/code

這是VS Code的Electron主程式,也就是實際的GUI執行檔。

直接執行:

/usr/share/code/code .

相當於直接啟動Electron應用。

2.2./usr/bin/code

這是VS Code提供的命令列啟動入口。在我的系統中,它是一個符號連結:

ls -l /usr/bin/code

輸出類似:

/usr/bin/code -> /usr/share/code/bin/code

/usr/share/code/bin/code是一個Shell指令碼。它會呼叫VS Code的CLI邏輯,再由CLI建立新視窗或者連線已經執行的VS Code程序。

可以檢視實際路徑:

readlink -f /usr/bin/code

因此,下面這條命令並不是簡單地直接執行Electron主程式:

code .

3.如何確認是不是啟動入口的問題

先正常退出所有VS Code視窗,然後分別測試下面兩個命令。

直接執行GUI程式:

/usr/share/code/code .

通過官方CLI入口執行:

/usr/bin/code .

在我的環境中,前一種方式無法正常進入Codex外掛,後一種方式可以正常使用。

接著檢查系統的VS Code桌面啟動器:

grep '^Exec=' /usr/share/applications/code.desktop

原來的配置為:

Exec=/usr/share/code/code %F
Exec=/usr/share/code/code --new-window %F

這就解釋了為什麼點選工作列圖示和在終端執行code會得到不同結果:工作列直接執行了Electron主程式,而終端使用的是VS Code CLI入口。

不同發行版和安裝方式的路徑可能不同。修改前應先通過command -v codereadlink -f "$(command -v code)"和桌面檔案中的Exec欄位確認實際路徑。

4.使用使用者級desktop檔案修復

不建議直接修改:

/usr/share/applications/code.desktop

這個檔案由系統軟體包管理,VS Code升級後可能會被覆蓋。更合適的方法是在當前使用者目錄建立同名desktop檔案,覆蓋系統啟動器。

4.1.1. 建立使用者級應用目錄

mkdir -p ~/.local/share/applications

4.2.2. 複製系統desktop檔案

cp /usr/share/applications/code.desktop \
  ~/.local/share/applications/code.desktop

4.3.3. 修改啟動路徑

把所有/usr/share/code/code替換為/usr/bin/code

sed -i \
  's#/usr/share/code/code#/usr/bin/code#g' \
  ~/.local/share/applications/code.desktop

4.4.4. 檢查修改結果

grep '^Exec=' ~/.local/share/applications/code.desktop

正確結果應該是:

Exec=/usr/bin/code %F
Exec=/usr/bin/code --new-window %F

4.5.5. 重新整理桌面應用快取

通用桌面資料庫可以這樣重新整理:

update-desktop-database ~/.local/share/applications

如果使用KDE Plasma,再執行:

kbuildsycoca6 --noincremental

較舊的KDE版本可能使用:

kbuildsycoca5 --noincremental

5.重新固定工作列圖示

即使desktop檔案已經修改,KDE工作列中原來固定的圖示仍可能保留舊啟動資訊。因此還需要:

  1. 從工作列取消固定原來的VS Code圖示;
  2. 在應用選單中重新搜尋“Visual Studio Code”;
  3. 從應用選單啟動一次並測試Codex外掛;
  4. 確認正常後,再將新的圖示固定到工作列。

之後,從工作列啟動VS Code就會使用:

/usr/bin/code

它與終端中的code命令走同一個啟動入口。

6.恢復原始配置

如果修改後需要恢復,只需刪除使用者級覆蓋檔案並重新整理快取:

rm ~/.local/share/applications/code.desktop
update-desktop-database ~/.local/share/applications
kbuildsycoca6 --noincremental

刪除後,系統會重新使用:

/usr/share/applications/code.desktop

7.總結

這次問題的關鍵不在Codex外掛本身,而在VS Code的啟動入口不同:

任务栏 → /usr/share/code/code → 直接启动Electron主程序
终端   → /usr/bin/code        → 通过VS Code CLI启动

將工作列的desktop啟動命令改為/usr/bin/code後,兩種啟動方式保持一致,Codex外掛也可以正常進入。

Linux下從工作列啟動VS Code時Codex外掛打不開的解決方法