本文列出Ivon在設定Flatpak版Visual Studio Code (VS Code) 過程遇到的一些眉角。
為何要安裝Flatpak版的Visual Studio Code?
Flatpak是一種Linux容器技術,將所有依賴項目打包在一起,將程式runtime與系統隔離。很多immutable distro都有採用Flatpak技術,例如Fedora Silverblue、openSUSE MicroOS、Endless OS、Vanilla OS、Steam OS 3.0 (Steam Deck)。
對這類發行版的用戶來說,既然不方便變更系統,那麼透過Flatpak安裝Visual Studio Code便是一個選項。
但是Flatpak的沙盒機制會對身為小型IDE的Visual Studio Code造成困擾,得要自行找解方。
- 測試系統:Ubuntu 22.04 LTS
- Visual Studio Code版本:1.85.1
警告:Flatpak版Visual Studio Code不受Microsoft官方支援。如果你想要在Linux無痛使用VSCode建議還是優先裝 官方發表的deb版。
Flatpak版Visual Studio Code目前由網路社群打包,相關Issue請優先到 Github儲存庫回報。
Flatpak版的Visual Studio Code可用以下指令安裝:
flatpak --user install flathub com.visualstudio.code
Flatpak版Visual Studio Code程式的資料會放在~/.var/app/com.visualstudio.code/
,請不要賦予家目錄的全部讀取權限,避免混亂。
1. 一些重要設定#
首先,開放Visual Studio Code存取其他硬碟的路徑,例如/run/media/user/SSD2
flatpak override --filesystem="/run/media/user/SSD2" com.visualstudio.code
我使用KDE桌面,但Microsoft無法同步帳號設定,要開放dbus session,讓Visual Studio Code可以讀取KWallet儲存密碼:
flatpak --user override--talk-name=org.kde.KWallet.* com.visualstudio.code
flatpak --user override --talk-name=org.kde.kwalletd5com.visualstudio.code
GNOME的話請嘗試在argv.json
加入"password-store": "gnome-libsecret"
。
若要讓Visual Studio Code使用Linux系統的終端機,按Ctrl+Shift+P,開啟使用者設定,開啟settings.json
,填入host-spawn指令,讓Visual Studio Code能啟動bash和使用sudo。
{
"terminal.integrated.defaultProfile.linux": "bash",
"terminal.integrated.profiles.linux": {
"bash": {
"path": "host-spawn",
"args": ["bash"]
}
}
}
如果要以純Wayland模式啟動Visual Studio Code,編輯desktop檔案~/.local/share/flatpak/app/com.visualstudio.code/current/active/export/share/applications/com.visualstudio.code.desktop
,在Exec=
加入以下引數:
Exec=/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=code --file-forwarding com.visualstudio.code --reuse-window @@ %F @@ --enable-features=UseOzonePlatform --ozone-platform=wayland
終端機字體如果怪怪的,用 fontconfig解決。
2. 開發程式語言的runtime問題#
若要開發C、Go、NodeJS、Java、C++之類的程式,Flatpak可能讀不到Linux系統所安裝的runtime。這時得從Flatpak套件庫裝Freedesktop.org的擴充套件,再將其啟用。
- 進入Visual Studio Code容器內部的bash
flatpak run --command=sh com.visualstudio.code
- 查看內建的runtime
# shared runtime
ls /usr/bin
# bundled with this flatpak
ls /app/bin
- 安裝對應程式語言的擴充套件,通常是
org.freedesktop.Sdk.Extension
開頭。用flatpak search
搜尋更多程式語言套件。
# C/C++
flatpak install org.freedesktop.Sdk.Extension.llvm14
# Rust
flatpak install org.freedesktop.Sdk.Extension.rust-stable
# .Net Framework
flatpak install flathub org.freedesktop.Sdk.Extension.dotnet
# Golang
flatpak install flathub org.freedesktop.Sdk.Extension.golang
# NodeJS
flatpak install flathub org.freedesktop.Sdk.Extension.node18
# OpenJDK
flatpak install flathub org.freedesktop.Sdk.Extension.openjdk17
- 裝好後,要為Visual Studio Code啟用指定的Extension,例如NodeJS 18,或用
*
啟用全部Extension
# 僅啟用node18
flatpak --user override --env=FLATPAK_ENABLE_SDK_EXT=node18 com.visualstudio.code
# 全部啟用
flatpak --user override --env=FLATPAK_ENABLE_SDK_EXT=* com.visualstudio.code
- 再將Flatpak內部的路徑加到PATH,比如這裡把Flatpak Bundle的NodeJS 18加進去
echo "PATH=$PATH:/home/user/.local/share/flatpak/runtime/org.freedesktop.Sdk.Extension.node18/x86_64/23.08/active/files/bin/" >> ~/.bashrc
source ~/.bashrc
- 有些程式工具寫死只能讀取系統的執行檔,或可嘗試用
flatpak override
開放讀取權限。
flatpak override --filesystem=/usr/bin/clang com.visualstudio.code
3. 連接至KVM虛擬機的問題#
賦予讀取kvm device的權限即可
sudo flatpak override --device=kvm com.visualstudio.code
flatpak override --user --device=kvm com.visualstudio.code
4. 連接Docker容器的問題#
如果要搭配延伸模組 ms-azuretools.vscode-docker,連接到本機Docker容器,啟用以下設定讓Flatpak存取Docker的socket:
sudo flatpak override --filesystem=/run/docker.sock com.visualstudio.code
flatpak override --user --filesystem=/run/docker.sock com.visualstudio.code
使用Podman的話則開放Podman的socket
flatpak override --user --filesystem=xdg-run/podman com.visualstudio.code
再於settings.json
指定Docker的路徑
{
"docker.dockerPath": "/run/host/usr/bin/docker"
}
Podman的路徑:
{
"docker.dockerPath": "/app/tools/podman/bin/podman-remote"
}
參考資料#
- Syncing issues · Issue #350 · flathub/com.visualstudio.code
- You’re running in a KDE environment but the OS keyring is not available for encryption. Ensure you have kwallet running. · Issue #189672 · microsoft/vscode
- Unable to use the docker extension · Issue #55 · flathub/com.visualstudio.code
- Dart extension failed to detect KVM · Issue #51 · flathub/com.visualstudio.code
- Problem with vscode : r/flatpak
- How to run VS Code Flatpak with a Toolbox container with code completion - Hack & Slash