Allow apps in proot-distro to draw windows on XFCE desktop in Termux. Integrate X11 GUI apps in proot-distro with Termux host desktop environment.
預設情況下,使用Termux的原生套件跑XFCE桌面環境,並且透過X11網路透明性的方式,讓proot-distro裡面的X11程式視窗能顯示在XFCE桌面。
這裡負責跑原生XFCE程式的,我們就姑且稱之為Termux宿主機,而proot-distro自然就是容器了。這個過程展示如下:
這個用法有點像是Linux桌面的容器工具Distrobox啦。它允許Docker裡面的X11圖形程式顯示在宿主機的桌面。
你可能會想說,我從proot-distro裡面直接啟動XFCE就好了,為什麼要用Termux的XFCE套件?
因為速度比較快,proot裡面的行程都是用ptrace模擬出來的,本來就比針對Termux原生編譯的程式執行速度要慢。現在Termux套件越來越多了,連Chromium瀏覽器都有了(收錄在TUR Repo),所以未來漸漸不用反客為主,用proot-distro跑桌面環境。如果大部分常用程式可以使用Termux原生版本執行,那麼就沒必要用proot-distro,僅在有需要的時候啟動proot-distro,跑那些Debian套件庫才有收錄的程式。
1. 給Termux安裝桌面環境#
參見Termux安裝XFCE4桌面,圖形顯示方式看要用Termux X11還是VNC都可以。
這裡還要額外加上一個套件,用於控制X客戶端連線到X伺服器的權限:
pkg install xorg-xhost
測試看看能不能啟動Termux桌面環境。
另外,我們可以開啟XFCE的檔案管理器,打開storage/shared
目錄,讀取Android內部儲存空間的檔案。
2. 設定proot-distro#
我安裝的是proot Debian
建議新增一般使用者,並在proot-distro裡面設定中文化。
Termux缺乏locales套件,不能設定中文。
並在proot-distro裡面安裝圖形程式,比如LibreOffice:
sudo apt install libreoffice
3. 在Termux桌面啟動proot-distro裡面的程式#
- 首先要執行xhost,允許proot-distro裡面的程式在Termux桌面的X伺服器繪製視窗。因為proot的行程是Termux user啟動的,所以用whoami指令帶入目前使用者名稱,允許這個使用者連線。
xhost +SI:localuser:$(whoami)
- 登入proot-distro,必須使用
--shared-tmp
共享X伺服器資源,再加上--termux-home
將Termux家目錄也掛載進去(如果不希望檔案被proot裡面的程式弄亂的話不掛載也罷)
proot-distro login debian --user user --shared-tmp --termux-home
- 指定
DISPLAY
環境變數,數值應該是Termux X伺服器的位址,一般來說是:0
。然後執行程式,比如LibreOffice:
export DISPLAY=:0
libreoffice
隨後就會看到LibreOffice視窗啟動了。
Termux桌面的檔案可以直接拖拉到LibreOffice視窗開啟。
但如果是從LibreOffice開啟檔案選擇器的話,預設只能看到proot-distro裡面的目錄。但因為上面有掛載Termux家目錄,所以proot-distro裡面使用者的家目錄/home
就變成了與Termux家目錄共享。
另外可以從/sdcard
讀取Android內部儲存空間的目錄。
4. 在Termux的桌面新增圖形捷徑#
做成Desktop Entry,就不需要手動登入proot-distro打指令了。
XFCE有快速生成Deskop Entry的方法,在桌面點選右鍵 → Create Launcher
Command部份輸入以下指令。登入Debian proot,用bash啟動LibreOffice。
proot-distro login debian --shared-tmp -- bash -c "DISPLAY=:1 libreoffice"
圖示檔案可以選取任意目錄的圖片,不過我會選擇用原本的。點選Icon,選Image Files,開啟檔案選擇器,路徑填寫/data/data/com.termux/files/var/lib/proot-distro/installed-rootfs/debian/usr/share/icons/hicolor/
。就可以找到Termux proot-distro裡面的圖示檔案。
儲存,點兩下,直接啟動LibreOffice。其他程式也可以這樣如法炮製。