AppImage 是 Linux (Ubuntu) 系統使用的可攜式應用程式集,他的好處是不會污染系統,每次執行階段才會掛載 (mount) 程式,程式要使用的相關模組檔案,也不會被安裝到系統中。要更新,還是移除程式,只要把應用程式的 AppImage 檔案刪除即可,相當方便。
但是 AppImage 檔案,有個不好用的地方,就是每次執行的時候,要先開啟檔案管理員,到存放 AppImage 檔案的地方,點開執行。這就罷了,執行以後,在 Launcher Bar 上面,顯示通用的系統圖示:
當你一次開了好幾種 AppImage 應用程式之後,Launcher Bar 上面,便重複好幾個一樣的圖示,常常在切換應用程式的時候,會搞不清楚哪個是哪個。暫停系統幾個小時回來,忘記執行過哪些 AppImage,還得用滑鼠滑過那些系統圖示,還挺麻煩的。
xxxx.desktop 檔案
若是能夠把那些 AppImage 應用程式,變成正常放在程式集裡面的圖示,那就太方便了。好在 Linux 是一個開放的架構,連這些功能,都是用文字檔便能搞定的。在 Ubuntu 系統下,使用者自訂的應用程式,是放在 ~/.local/share/applications 下。無論是 Snap 相容性問題,還是現在要處理的 AppImage,都可以在這裡製造一個程式集裡面的應用程式跟 Icon。
在這個目錄中,你應該可以看到已經存在的幾個應用程式定義檔案,每個檔案的名稱都是 xxxx.desktop,以 desktop 當作副檔名。隨便打開一個檔案來看,你就可以看到某個應用程式,是怎麼定義它的相關執行內容。其中,比較重要的是 Exec= (或 TryExec=) 以及 Icon= 這兩個參數。基本上,只要有這兩個參數,就能讓程式集顯示應用程式的Icon,點擊之後,便會執行開啟應用程式。
AppImage 執行後的掛載位置
AppImage 是一種執行後才掛載的程式包,當你執行某個 AppImage 之後,就可以用 mount 指令,查看掛載的狀況。
以下,我們將以 Etcher 這個行動碟寫入軟體的 AppImage 檔案為例,學習如何把這個應用程式,手動加入程式集中。
首先,執行 Etcher 這個 AppImage,然後用 mount 查看目前的掛載狀況:
mount | grep Etcher
得到以下結果,可以看到目前 Etcher 的所有程式檔案是掛載在 /tmp/.mount_balenaTI9MKB 這個目錄下:
balenaEtcher-1.5.45-x64.AppImage on /tmp/.mount_balenaTI9MKB type fuse.balenaEtcher-1.5.45-x64.AppImage (ro,nosuid,nodev,relatime,user_id=1000,group_id=1000)
編輯 .desktop 檔案
balena-etcher-electron.desktop 檔案內容長這樣:
[Desktop Entry]
Name=balenaEtcher
Comment=Flash OS images to SD cards and USB drives, safely and easily.
Exec=AppRun
Terminal=false
Type=Application
Icon=balena-etcher-electron
StartupWMClass=balenaEtcher
X-AppImage-Version=1.5.45
Categories=Utility;
X-AppImage-BuildId=1MAuMI3PKOshE9F2ew6IskkY0vX
更新圖示檔快取
由於剛剛複製圖示的時候,是把整個 hicolor 目錄複製過去,原本在 ~/.local/share/icons 下面的快取檔被覆蓋,造成圖示顯示錯誤,甚至以前安裝的程式的圖示都沒了。
我們必須用以下指令,更新hicolor 目錄下的快取檔 -f 是強制更新快取檔,--ignore-theme-index 則是忽略 index.theme 的內容,直接更新所有icon:
gtk-update-icon-cache -f --ignore-theme-index ~/.local/share/icons/hicolor
gtk-update-icon-cache: Cache file created successfully.
以上全部弄好以後,就能在程式集與Launcher Bar 上面看到 balenaEtcher 的圖示正常顯示了。以後要啟動程式,就不需要跑到 AppImage 目錄點擊,直接到程式集或Launcher點擊即可。
沒有留言:
張貼留言