:::

如何開啓AppImage裡面的指定應用程式?以WPS為例 / How to open a specific application in an AppImage? Using WPS Office as an example

6/26/2021 0 Comments Edit Copy Download

3-AppImage_WPS_How_to_use_files_in-06021022.png

哈囉,大家最近在吃什麼呢?這裡是越用越喜歡Linux的布丁。

你知道Linux的免安裝應用程式AppImage嗎?AppImage主打「一個檔案=一個應用程式」的特色,只要下載並開啓權限後,就能直接執行應用程式。但直接執行AppImage時只能執行創造者預設好的指定指令。如果我們想要執行AppImage中的其他應用程式或檔案的話,可以先把它掛載到/tmp暫存資料夾,然後就可以直接使用AppImage中其他的應用程式了。

本篇使用的例子是WPS Office的AppImage。原本WPS Office的AppImage只允許我們使用WPS文件編輯器(WPS Writer)。如果我們要將副檔名為「dps」的WPS投影片檔案格式(WPS Presentation),用WPS Office的WPP投影片編輯器開啟的話,那就得要用這個方法囉。讓我們來看看要怎麼做吧。


沒工商版面:Podcast Republic/ Non-advertising column: Podcast Republic

2021-06-25_222007.png

(圖片來源:Google Play)

在開始之前,我們先來進段沒工商版面。沒工商版面的靈感是來自於動漫評論家A Jie 宅漫慢說的Podcast。如果有工商,這裡就會是工商的廣告。如果沒有工商,那我就會在這裡簡短地分享一件我有興趣的事物。

既然沒工商版面是從Podcast來的,那這個第一次沒工商版面就來介紹我很喜歡的Podcast應用程式:Podcast Republic。Podcast是一種廣播或影片節目等多媒體內容的訂閱機制。它採用了類似RSS訂閱Blog文章的形式,讓我們可以聆聽訂閱特定資料來源的最新節目。Android上支援Podcast的應用程式很多,但Podcast Republic具有許多其他應用程式所沒有的訂閱清單與播放進度的同步機制。這對擁有多個Android裝置與Chromebook的我來說非常實用。此外,Podcast Republic能夠將多個資訊來源組織成播放清單,並且可按照時間排序或按照不同資料來源輪替要播放的節目。Podcast Republic除了具備超豐富的聲音調節功能之外,還能用它內建的影片播放器,訂閱影片類型的資料來源。

綜上所述,Podcast Republic讓我喜愛的三大特色如下:

  1. 訂閱清單和播放進度的同步功能:換一個裝置後,你也能從上次的進度繼續聆聽。
  2. 支援多規則的播放清單:混合多個資料來源輪流播放不同節目,讓你一直聽不膩。
  3. 超豐富聲音與影片播放器設定功能:要快要慢、大聲小聲都隨你調。

Podcast Republic的相關資訊如下:

如果你想知道更多關於Podcast Republic的內容,可以在下面留言跟我說喔。讓我們結束沒工商版面,回到今天要講的主題吧。


AppImage是什麼? / What is AppImage?

2021-0625-224310.png

(圖片來源:AppImage)

比起把應用程式安裝在電腦上,我更喜歡不需要安裝、能夠直接執行的免安裝應用程式。以前我也常常介紹Windows上的免安裝應用程式,例如LibreOffice Portable。免安裝應用程式在Linux作業系統也相當盛行。大部分也是下載後、直接執行就能使用。最知名的免安裝應用程式格式是snap。但因為Chromebook的crouton不能使用snap,所以我主要使用另一種Linux上常見免安裝應用程式格式,也就是今天要講的主角:AppImage。

根據AppImage的說明。在將應用程式以AppImage格式打包後,使用者只要下載該應用程式的AppImage檔案、設定它的執行權限,然後就可以直接執行它。目前Linux的主流發佈版都能使用AppImage,包括Ubuntu、Debian、Fedora。AppImage的核心概念就是:一個應用程式 = 一個檔案 (one app = one file)。容易使用,而且快速。

不只一個應用程式的AppImage / Multiple applications in an AppImage file

2021-0625-225616.png

(圖片來源:Apprepo)

ok,如果一個AppImage裡面只有一個應用程式,那世界一切都很美好。問題是,當我們遇到一個AppImage,裡面不只有一個應用程式的時候,那該怎麼辦?

現在我們要來使用的AppImage是WPS Office。它是一套類似Microsoft Office的辦公室套裝軟體,同樣也具有文書處理、試算表編輯、投影片編輯等多個應用程式。在Apprepo裡面有著已經被打包好的AppImage,它的下載連結如下:

如果要讓WPS Office可以執行,那需要執行以下兩行指令:

chmod +x ./WPS-Office.AppImage
./WPS-Office.AppImage

Screenshot_2021-06-26_00-38-59.png

在使用chmod開啟了執行權限後,我們就可以直接執行WPS-Office.AppImage。也可以將WPS-Office.AppImage執行指令加入到應用程式列表中,方便我們將副檔名.wps的檔案直接用WPS-Office.AppImage開啟。

DeepinScreenshot_select-area_20210626004331_a.png

不過,如果我們手邊的是WPS投影片編輯器的檔案格式,也就是副檔名為.dps的檔案時,那要怎麼用WPS-Office.AppImage開啟呢?

不可直接修改AppImage / AppImage are read-only

2021-0625-230501.png

(圖片來源:StackExchange)

我本來的想法是看能不能修改AppImage裡面的檔案。不過找了老半天,我找到的方式都是建議重新打包AppImage。要重新打包,意謂著我們得必須準備好處理AppImage的appimagetool建置的手續看起來也有點複雜。我研究了一陣子,最後放棄了修改AppImage的念頭。

使用AppImage中的檔案 / Use files in AppImage by mounting

2021-0625-231108.png

(圖片來源:AppImage)

雖然我沒辦法變更AppImage裡面的檔案內容,但還是有方法可以使用AppImage裡面的其他檔案。根據AppImage說明文件中「掛載AppImage」 (Mount an Image)裡面有提到,我們可以將AppImage掛載到暫存資料夾 /tmp 底下。掛載的指令就是在可執行的AppImage後面加上「--appimage-mount」參數,例如下面的指令:

my.AppImage --appimage-mount

接著指令會輸出一段路徑,例如:

/tmp/mount_myXXXX

這段路徑表示AppImage掛載的位置。此時該指令並不會停止。當指令持續運作時,表示AppImage持續掛載在這個位置。我們可以按「Ctrl + c」取消現在的指令,此時掛載會停止。

DeepinScreenshot_select-area_20210626005041_p.png

如果將WPS-Office.AppImage掛載後,我們就可以在/tmp/.mount-WPS_OfXXXXXX/opt/application/ 裡面找到投影片編輯器的檔案wpp。

2021-0626-004532.png

Screenshot_2021-06-26_00-45-50_e.png

執行wpp檔案,就能開啟投影片編輯器WPS Presentation囉。


腳本與佈署 / Scripts and setup

如果我們可以透過掛載來使用AppImage裡面的其他檔案的話,那我們就可以撰寫兩個腳本輔助我們完成這個任務。以下是我在Chromebook以crouton安裝的Ubuntu 18.04環境中所進行的操作。

這兩個腳本的任務如下:

  1. 讓Linux在開機時自動掛載AppImage。
  2. 執行掛載後的特定檔案。

我爲WPS-Office.AppImage撰寫了WPS-Office-mount.sh跟WPS-Office-wpp.sh兩個腳本。接著再將WPS-Office.AppImage檔案跟腳本放到以下路徑,此處的USER是使用者帳號:

/home/USER/AppImages/WPS-Office/WPS-Office.AppImage
/home/USER/AppImages/WPS-Office/WPS-Office-mount.sh
/home/USER/AppImages/WPS-Office/WPS-Office-wpp.sh

使用chmod指令將這些檔案賦予執行權限:

chmod +x /home/USER/AppImages/WPS-Office/*

以下我們繼續來看看這兩個腳本的內容,以及這兩個腳本的佈署方式。

掛載AppImage: WPS-Office-mount.sh / Script to mount the AppImage file

WPS-Office-mount.sh的內容如下:

/home/USER/AppImages/WPS-Office/WPS-Office.AppImage --appimage-mount &

在執行WPS-Office.AppImage的時候,我們加上了「--appimage-mount」參數,使它掛載到/tmp暫存資料夾底下。

除此之外,我們也在指令後方加上了「&」,讓該指令保持在背景執行。關於在背景執行指令的觀念,請看鳥哥的「程序管理與 SELinux 初探」說明。

腳本佈署 / Deploy

deepin-screenshot.J13691_a.png

我們讓Linux開機的時候執行WPS-Office-mount.sh。Linux有很多方式可以設定開機時要執行的指令或腳本。在這裡我使用的是Startup Application Preference (套件名稱是gnome-startup-applications)。指令(Command)的部分設爲WPS-Office-mount.sh的路徑,名稱(Name)隨意即可。關於Startup Application Preference的詳細操作請參考StackExchange的說明

在這裡我們先執行WPS-Office-mount.sh,讓WPS-Office.AppImage先掛載到/tmp資料夾下。接著再來看另一個腳本吧。

執行AppImage中的檔案: WPS-Office-wpp.sh / Script to run a file in the AppImage

WPS-Office-wpp.sh的內容如下:

/tmp/.mount_WPS-Of*/opt/application/wpp "$1"

這段指令可以分三個部分來說明,我用三種不同的顏色來標示:

  • /tmp/.mount_WPS-Of*/:這段表示WPS-Office.AppImage會掛載到/tmp底下的特定目錄。其中Of後面的文字會是隨機字串,因此在此用*表示。
  • /opt/application/wpp:這段是我們要在WPS-Office.AppImage中執行的應用程式路徑。wpp就是WPS Office的投影片編輯器。
  • "$1":這個符號會被替換成接續在腳本後面的參數。如此一來我們就可以使用WPS-Office-wpp.sh開啓檔案。

腳本佈署:應用程式清單 / Deploy: Applications

2021-0626-011858.png

我們要將WPS-Office-wpp.sh加入Linux的應用程式清單。這邊我使用的是應用程式清單編輯器Main Menu (套件名稱:alacarte)。指令(Command)爲WPS-Office-wpp.sh的路徑,名稱(Name)隨意即可。我設成「WPP」跟後面一串關鍵字,方便搜尋。

2021-0626-012702.png

應用程式選單中就會出現我們設定的應用程式WPP。

腳本佈署:開啓檔案 / Deploy: Open With

再來我們要讓副檔名.dps的檔案能夠直接使用WPP開啓。這裡我提供一個Hello, World的範例檔案供大家下載嘗試:

eScreenshot_2021-06-26_01-25-16_a_1_1.png

我們在Linux檔案管理器的.dps檔案上按右鍵,使用「Open With Other Application...」。

2021-0626-012220.png

選擇剛剛建立應用程式WPP。如果前面有掛載過WPS-Office.AppImage的話,此處按下Open,應該能夠正常啓動。

2021-0626-013539.png

就像這樣,直接使用WPS Presentation開啓dps檔案了。


結語 / In closing

AppImage原本設計的用途是讓使用者直接執行、開啓指定的應用程式。本篇嘗試使用掛載與執行的方式,讓我們能夠享受AppImage免安裝便利性的同時,也能夠活用AppImage裡面更多的功能。

雖然寫到最後才聲明,不過其實我還是Linux的初學者,不太確定這樣的形式是否是使用Linux的最佳做法。畢竟Linux的客製化功能真的很多,而且發佈版、發佈版各自的版本之間也有些許不同。直到現在,我還是抱著一顆學習的心,一邊探索Linux的世界。如果您有其他的建議,歡迎在下面留言處給我指教喔!


那麼這次使用AppImage中其他應用程式的教學就到這裡了。寫到最後,我有個問題想要問問大家:

你用過哪些Linux的免安裝應用程式格式呢?

  • A. snap:Ubuntu的主流,有方便的商店可以使用。
  • B. Flatpak:安裝簡單,容易管理。
  • C. AppImage:單一檔案就可執行,簡潔有力。
  • D. 我都直接安裝,不使用免安裝應用程式格式。

歡迎在下面的留言處跟大家分享你的想法。你的意見都是我繼續分享的動力喔!

如果你覺得我這篇實用的話,請幫我在AddThis分享工具按讚,或是將這篇分享到Facebook等社群媒體吧!想在社群媒體追蹤我的話,歡迎到我的Facebook粉絲專頁「布丁布丁吃什麼?」按個讚喔!

不知道這篇文章有沒有讓你吃到些有用的東西呢?我是布丁,期待下次見!