iT邦幫忙

0

AppImage 使用筆記

  • 分享至 

  • xImage
  •  

前言

之前介紹了一些筆記軟體,其中 Joplin 深受筆者的喜愛。最近為了備戰鐵人賽,所以裝了一個 Kubuntu Desktop 環境來使用,也把 Joplin 載來用看看 Linux 版本有什麼不一樣。發現 Joplin 原來是使用 .AppImage 格式發布的,過去筆者較少使用帶桌面環境的 Linux 發行版,所以比較不熟悉這個格式。藉此機會研究了一下相關資訊,並整理成筆記,當作鐵人賽前的暖身。

簡介

AppImage 前身是 PortableLinuxApps 與 klik,主打可攜式軟體發布方法,也就是 Windows 裡常見的 "Portable" 概念。使用 AppImage 有幾個優點:

  1. 無需安裝:使用者只需要點兩下就能執行程式。
  2. 跨發行版:多數主流的 Linux 發行版都能直接執行。
  3. 無須權限:不需要 Root 權限也能執行程式。
  4. 包裝方便:對開發者而言,可以很輕鬆的將程式包裝成 .AppImage 格式。

包裝 AppImage 時,會將所有程式會用到的 Library 與 Dependency 壓縮成一個檔案,並在執行時透過 FUSE 掛載到系統裡面。

AppImage - Official Website | GitHub | Wikipedia

使用

基本用法

基本用法非常簡單直觀,以 Joplin 為例,到官方 GitHub 的 Release 頁面下載 .AppImage 格式的執行檔,然後加上執行權限就可以執行了:

# 下載 Joplin 執行檔
wget https://github.com/laurent22/joplin/releases/download/v2.11.11/Joplin-2.11.11.AppImage

# 檢查 Joplin 的 SHA-512
wget https://github.com/laurent22/joplin/releases/download/v2.11.11/Joplin-2.11.11.AppImage.sha512
echo "$(cat Joplin-2.11.11.AppImage.sha512) Joplin-2.11.11.AppImage" | sha512sum -c -

# 賦予 Joplin 執行權限並執行
chmod +x Joplin-2.11.11.AppImage
./Joplin-2.11.11.AppImage

建立捷徑

若沒有將 Joplin 加入 Path 的話,每次都透過 CLI 執行 Joplin 其實不那麼方便。若我們要將 Joplin 建立到桌面當捷徑,可以考慮幫它寫一個 .desktop 的捷徑檔,其內容如下:

# ~/Desktop/joplin.desktop
[Desktop Entry]
Name=Joplin
Exec=/path/to/Joplin-2.11.11.AppImage
Icon=/path/to/joplinapp-desktop.png
Terminal=false
Type=Application
Categories=Office;Notes;

.desktop 也是個有趣的格式規範,待筆者研究的更詳細之後再來分享心得,先暫時能用就好。在這裡會遇到一個問題:一個桌面捷徑不能沒有美美的圖示,那我們要去哪裡把程式的圖示挖出來呢?我們可以輸入以下指令,將程式掛載起來:

$ ./Joplin-2.11.11.AppImage --appimage-mount 
/tmp/.mount_JoplinbcSnpd

此時程式輸出了一個路徑,在這個路徑底下,所有該程式會用到的檔案都一覽無遺,可以到該路徑底下列出檔案列表:

$ ll
total 186M
-rwxr-xr-x root root 2.4K AppRun
...
-rwxr-xr-x root root 145M @joplinapp-desktop
-rw-r--r-- root root  229 @joplinapp-desktop.desktop
lrwxrwxrwx root root   61 @joplinapp-desktop.png -> usr/share/icons/hicolor/1024x1024/apps/@joplinapp-desktop.png
...

發現有個神秘的 Link 連向某個 .png 檔,看來這東西高機率就是我們要的圖示了。這時筆者自作聰明的將這個路徑加上 / 變成 /usr/share/.../@joplinapp-desktop.png,結果發現根本沒這個檔案啊?

原來是因為在 /tmp/.mount_JoplinbcSnpd 底下也有個 usr 資料夾,沿著這個資料夾往下找才會找到正確的圖示檔位置如下:

/tmp/.mount_JoplinbcSnpd/usr/share/icons/hicolor/1024x1024/apps/@joplinapp-desktop.png

因為這個圖示路徑只有在掛載時才會出現,而且每次掛載的路徑都不一樣,因此我們將這個圖示複製到執行檔的旁邊,就能完成 .desktop 裡面 Icon 的設定。

至此,我們完成了一個有美美圖示的桌面捷徑,可以用來執行某個 AppImage 格式的執行檔。

釘選到工具列

接下來的挑戰是:我們可以把這個程式釘選到畫面下方的工具列嗎?

筆者嘗試執行 Joplin 後,直接在工具列上右鍵釘選正在執行的 Joplin,然後就心滿意足的去做自己的事情了。結果隔天重開電腦後發現:阿怎麼工具列上的 Joplin 點了會報錯勒?錯誤訊息如下:

The file or folder /tmp/.mount_JoplinYWh41R/@joplinapp-desktop does not exist.

很明顯的,就是因為每次 AppImage 掛載的路徑都不一樣造成的錯誤。如果我們要將 AppImage 釘選到工具列,可以參考以下流程:

  1. 將前面寫好的 .desktop 檔案複製到 ~/.local/share/applications 底下。
  2. 執行指令 kbuildsycoca5 使這個新的設定生效。

這時打開主選單(按下 WinKey 會跳出來的 Application Launcher)搜尋 Joplin 就會發現他出現在我們的主選單裡面了,這時對主選單裡的 Joplin 按右鍵釘選就可以了~

包裝

透過 AppImage 官方 GitHub 上提供的工具,我們能夠輕鬆的將程式打包成 AppImage 格式。首先到 Release 頁面下載工具(該工具也是 AppImage 格式的執行檔 XD)並賦予執行權限。

首先,隨意寫個 C 語言程式並編譯,假設編譯完的執行檔檔名為 Hello,我們在當前目錄下建立一個 AppDir 資料夾,然後把 Hello 放在 AppDir/usr/bin/ 底下。

然後寫一個 AppDir/AppRun 的檔案,這個檔案實際上就是個 Shell Script,用來描述執行此程式的行為,例如:

#!/bin/bash

HERE="$(dirname "$(readlink -f "${0}")")"
exec "${HERE}/usr/bin/Hello"

接下來撰寫 AppDir/Hello.desktop 檔案:

[Desktop Entry]
Name=Hello
Exec=AppRun
Type=Application
Icon=Hello
Categories=Utility;

你可以在 AppDir 底下放一個 Hello.png 作為圖示檔,但是在撰寫 .desktop 時似乎不需要加上副檔名。

接下來透過 AppImage Tool 打包我們的程式:

./appimagetool-x86_64.AppImage AppDir

這時當前目錄底下就會長出一個 Hello-x86_64.AppImage 的檔案,嘗試執行這個檔案確認是否能順利運作,這樣就大功告成啦!

雖然這對一個本身就能跨平台的 C 語言程式而言,似乎有點多此一舉,但就當作是個可以幫 CLI Tool 加 Icon 的工具吧 ((?

結論

在探索 AppImage 用法的過程中,筆者意外的發現許多收穫。在 Linux 系統(至少在 Kubuntu 上)對 AppImage 的整合性非常好。雖然與 apt, snap 或直接從 .deb 檔案等其他安裝方式相比,AppImage 的設定過程略為複雜,需要更多的調整才會比較符合一般使用需求,然而 AppImage 依然是一個靈活且實用的軟體發布方法。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言