這篇文章將講解Linux上以.AppImage
檔名結尾的應用程式安裝方法,並介紹輔助工具「AppImage Launcher」。
AppImage是Linux的一種軟體打包格式,用於解決不同Linux發行版安裝應用程式依賴的問題而生。
以AppImage打包的應用程式,需要的依賴套件都包在一起,下載就是單一檔案,點二下就可以執行,不需要安裝,也無需考量不同Linux發行版的差異。概念上AppImage類似於Windows的可攜式exe、macOS的dmg。
AppImage主要依賴FUSE掛載檔案系統運作,現在大部份64位元Linux發行版應該都支援AppImage格式,無需安裝套件就可以執行。
1. 如何安裝AppImage格式的程式?#
嚴格來說,AppImage應用程式不需要「安裝」,因為下載後直接點選執行就可以了。如果你還是想要「安裝」到固定目錄,後面我們會再介紹用AppImage Launcher工具管理。
網站 Appimagehub有收錄許多AppImage格式的軟體,例如Firefox、GIMP、Kdenlive、Blender、LibreOffice。
Github上有些軟體開發者也會以AppImage格式分發他們的軟體。
以Mozilla Firefox為例,到 AppImage Hub點選Download,下載.AppImage的檔案
AppImage需要賦予執行權限。如果你用的是KDE檔案管理員的話可以右鍵 → 屬性 → 權限,勾選其為可執行檔,GNOME亦同。
如果沒辦法用檔案管理員賦予權限,那就用chmod指令賦予執行權限
chmod +x firefox.AppImage
在那之後對AppImage按二下,應用程式即會啟動。AppImage檔案可放在任意目錄,都是點二下就能執行。
如果AppImage點了沒反應,試著用終端機執行,並看看有無輸出錯誤訊息。
./firefox.AppImage
- AppImage後面也可以接指令參數,例如指定Firefox開啟隱私視窗
./firefox.AppImage -private
(此狀況很少見)如果你的系統不支援FUSE,導致沒辦法執行AppImage,那麼試試將AppImage解壓縮,執行裡面的二進位檔
./firefox.AppImage --appimage-extract
cd squashfs-root
./AppRun
解開後的AppImage可以自行修改內容,再用 appimagetool打包回去。
2. 使用AppImage Launcher管理程式#
AppImage雖然有可攜的特性,但是要管理和刪除仍是不方便。譬如,上面我們安裝了AppImage版的Firefox,但每次開啟都要進去檔案管理員點選,無法從應用程式列表啟動,是否太麻煩了些?
那就來安裝AppImge Launcher吧!將AppImage與桌面環境完美整合。它會在你執行AppImage後自動幫你把移動AppImage到固定路徑,並在應用程式列表建立捷徑。
至 Github “Assets"處,下載AMD64架構的deb檔安裝。
於下載目錄開啟終端機,安裝deb檔
sudo apt install ./appimagelauncher_2.2.0-travis995.0f91801.bionic_amd64.deb
點選之前下載的AppImage檔案,於AppImage Launcher初始化的界面點選確定。
自此之後,執行AppImage的檔案,AppImage Launcher都會詢問是否要整合至系統(Integrate and run)還是直接執行(Run once)。
若不希望出現此對話框,可以使用環境變數APPIMAGELAUNCHER_DISABLE=
暫時停用AppImage Launcher。
選擇「整合至系統」,該AppImage便會移動到
~/Applications
,且圖示會出現在應用程式列表。對其點右鍵可以檢查更新(Update AppImage)。
如果要「解除安裝」AppImage,於應用程式列表對圖示按下右鍵,選取
Remove AppImage from system
,圖示和AppImage檔就會刪除。
如果覺得手動更新很麻煩,你也可以安裝 Zap AppImage package manager,用指令管理AppImage更新。
3. 在命令行使用AppImage程式#
如果用AppImage安裝vim,如何在命令行直接呼叫vim使用呢?
AppImage本身就像一個二進位執行檔,因此確認AppImage路徑後,再把檔案所在路徑加入到PATH環境變數就行了。
譬如,使用AppImage Launcher所安裝的vim.AppImage
會跑到~/Applications
,那麼就把該路徑加入到~/.bashrc
:
echo "PATH=$PATH:~/Applications" >> ~/.bashrc
source ~/.bashrc
或者,按照AppImage的絕對路徑建立alias,指向AppImage所在位置:
echo "alias vim='~/Applications/vim.AppImage'" >> ~/.bashrc
source ~/.bashrc
4. 關於AppImage的技術細節#
設定檔位置#
AppImage設定檔的位置跟一般套件管理器的相似,比如AppImage版Firefox仍會優先讀取位於~/.mozilla
的資料,不會另外建立新的目錄。所以如果deb版Firefox跟AppImage版Firefox一起用的話資料可能會互相干擾。
如果想將AppImage的應用程式設定檔一併帶著走,請參閱 將Linux AppImage變成可攜式軟體!Portable mode使用方式
AppImage沒有沙盒隔離的效果,應用程式執行時仍可以存取使用者所有目錄。想要沙盒隔離請搭配 FireJail或者上述的Portable mode來隔離設定檔。
不包含驅動程式#
AppImage包的runtime其實沒有你想像的多,使用musl函式庫的Linux發行版可能無法執行以glibc打包的AppImage。
如果系統底層函式庫出問題,那AppImage也會受影響。比方說開發者用舊版Ubuntu系統打包,那麼Arch Linux不見得100%能執行。
如果應用程式需要用到Nvidia圖形驅動程式,AppImage也不會提供,使用者需要在系統事先安裝。
所以跟Snap和Flatpak比起來,AppImage程式還是得很大程度依賴系統的runtime才能跑起來。
跨架構支援需要另外打包#
AppImage沒有跨架構模擬的效果,ARM和x86平台需要下載對應其架構的AppImage檔案。
延伸閱讀#
如果你想把軟體打包成AppImage,請參考 AppImage Documentation
像AppImage意圖解決跨發行版問題的打包格式還有 Flatpak和 Snap。相較前二者,AppImage的優點是免安裝直接用,不需要額外套件管理器;但缺點是AppImage不能用套件管理員指令更新,也沒有應用程式商店前端能用。