如何把 AppImage 的可攜應用程式,加入程式集中

 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 檔案,跟 Icons

首先,看到目錄中就有 balena-etcher-electron.desktop,同時在 usr/share/icons 下面看到 hicolor 這個目錄,裡面存放各種尺寸的圖示。

複製 .desktop 程式定義檔,與圖示檔到 ~/.local/share

把剛剛看到那個 balena-etcher-electron.desktop 程式定義檔複製到使用者目錄下的 ~/.local/share/applications 

然後把所有圖示檔,複製到 ~/.local/share/icons 下面,我是直接把整個 hicolor 目錄複製過去:
cp -R hicolor ~/.local/share/icons

編輯 .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

其中,定義程式執行擋在這裡:
Exec=AppRun

圖示在這裡:
Icon=balena-etcher-electron

只要修改 Exec這行就可以,把 AppRun 改成你的 AppImage 完整目錄檔名,像我的 AppImage 是放在 Documents 下面,所以要改成:
Exec=/home/mememe/Documents/AppImage/balenaEtcher-1.5.45-x64.AppImage

儲存之後,你就會看見程式集裡面,多了 balenaEtcher 這個程式。程式的名稱是由 Name=balenaEtcher 這行參數決定的,你高興的話,也可以自訂其他名字。

更新圖示檔快取

由於剛剛複製圖示的時候,是把整個 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點擊即可。

沒有留言:

張貼留言