分類
Linux 软件

Turmux X11 以及 VSCode

本篇文件介紹如何在安卓手機上運行 VSCode 來實現在旅途中繼續編碼。我使用的手機是 2018 年的 Xperia XZ2,內存只有 4GB,CPU 型號是 Qualcomm SDM845,屏幕是 5.7 in (140 mm) 1080p (2160 × 1080) IPS LCD, ~424 pixel density。最終效果如下:

VSCode On Debian With Termux

藉助 Termux 我們得以在安卓上運行多種 Linux,之所以選擇 Debian 是因爲它相對輕量且不含 systemd (安卓不支持)。本文得以形成主要是參考了 Termux X11:手機的X伺服器使用教學Android手機安裝Linux發行版:Termux proot-distro使用教學 以及 VSCode installation tutorial with Termux-x11,在此一併感謝!

如果你的手機性能良好,推薦按照 Ivon 的文章安裝 Xfce4 桌面環境,這樣東西就一應俱全了(除了不能運行 Docker,安卓內核不支持)。

安裝 Termux

雖然可以直接去 Github 下載安裝包,但是還是建議去 F-Droid 安裝Termux。當前的最新版本是 0.118.0。安裝完成後執行下列命令:

pkg update
pkg upgrade
pkg install nano proot-distro x11-repo termux-x11-nightly
termux-setup-storage

安裝 X11

這裏需要到 Github 下載 X11 的安裝包。如果沒有 Github 賬戶,可以從這裏下載我安裝的這個版本。

安裝 Debian

手機性能好的話,可以嘗試其他口味的 Linux 以及桌面環境。我的手機連 Xfce4 也運行不起來(X11 裏可以,但是 Debian 裏就會自動退出),所以我使用輕量的 openbox。

proot-distro install debian
#進入 Debian
proot-distro login debian
apt update
apt upgrade
apt install nano sudo wget git
#添加普通用戶
passwd
groupadd storage
groupadd wheel
groupadd video
#替換 [USER] 爲你想要的名字
useradd -m -g users -G wheel,audio,video,storage -s /bin/bash [USER]
passwd [USER]
visudo
#在 root ALL=(ALL:ALL) ALL 這行的後面添加
[USER] root ALL=(ALL:ALL) ALL
#保存後使用 exit 退出 Debian

創建兩個腳本來啓動和關閉 X11:

##以下是startDebian.sh
#!/bin/bash
export DISPLAY=:0
killall -9 termux-x11 termux-wake-lock
# 啟動Termux X11
am start --user 0 -n com.termux.x11/com.termux.x11.MainActivity
XDG_RUNTIME_DIR=${TMPDIR}
termux-x11 :0 &
sleep 3

proot-distro login debian --user [USER] --shared-tmp
##以下是stopDebian.sh
#!/bin/bash
killall -9 termux-x11

然後給予可執行權限:

chmod +x startDebian.sh
chmod +x stopDebian.sh
#然後執行 startDebian.sh 就能就如 Debian 了
./startDebian.sh
#若出現報錯 ERROR: openbox-xdg-autostart requires PyXDG to be installed 可以按回車鍵忽略
#安裝窗口管理器
sudo apt install xorg openbox
sudo apt install firefox-esr fonts-noto-cjk proxychains4 curl tint2 xclip pcmanfm
#火狐:你需要一個瀏覽器
#fonts-noto-cjk:字體
#proxychains4:沒有代理不科學
#curl:安裝 curl 可以修復使用 proxychains4 時 library "libdl.so.2" not found 的錯誤
#tint2:任務欄讓桌面更美好
#pcmanfm:桌面環境怎能少得了文件管理器
#xclip:把剪切版的內容從安卓傳遞到 Debian

# .bashrc 中添加下面文本

alias pp='termux-clipboard-get | xclip -sel clipboard'
alias p='proxychains4'

export DISPLAY=:0
if ! pgrep -x "openbox" > /dev/null; then
    openbox-session &
    tint2 &
fi

安裝 VSCode

前往 VSCode 下載頁,下載 Arm64 版本的 .deb 安裝包。可以通過瀏覽器下載,然後下載頁會有下載的直鏈,複製後用 wget 下載就好。

#安裝 VSCode
sudo dpkg -i /sdcard/Downloads/code-[VERSION].deb
#如果出現報錯嘗試
sudo apt --fix-broken install
#然後再試試上面的 dpkg 安裝指令

最在啓動欄創建兩個常用的快捷啓動方式:先修改下桌面快捷方式

#把 /usr/share/applications/code.desktop 中的
Exec=/usr/share/code/code --unity-launch %F
#改爲
Exec=/usr/share/code/code --no-sandbox %F

#把 /usr/share/applications/firefox-esr.desktop 中的
Exec=/usr/lib/firefox-esr/firefox-esr %u
#改爲
Exec=/usr/lib/firefox-esr/firefox-esr --no-sandbox %u

兩個手機點一下桌面(黑屏)呼出右鍵菜單,選擇 Applications > Settings > Tint2 Settings 。點擊左上角編輯,Panel 推薦設置在左邊,length 150%,size 60 pixels。Panel items 留下 Launcher 和 Taskbar 即可。Lanucher 裏選擇 VS Code 和 Firefox ESR 保存即可。

既然提到了命令行啓動火狐,順便記錄下火狐的多用戶。在命令行加上 -P 可以啓動 Profile 管理器。在管理器裏可以新增、重命名以及設置默認的用戶。想以用戶 42 啓動,則把上面快捷方式裏的運行項改爲 /usr/lib/firefox-esr/firefox-esr --no-sandbox -P 42 %u 即可。

Firefox 在 A Profile 升級後,从 B Profile 啟動可能會出現問題:"You've launched an older version of firefox" "Using an old version of Firefox..."。此時可以在啟動命令後加上 -allow-downgrade 就可以啟動了。然後關閉火狐就可以正常啟動了。

使用場景

開始使用

  1. 啓動 Termux
  2. ./startDebian.sh

退出

  1. 切換到 Termux,執行 exit
  2. ./stopDebian.sh

其他小撇步

字體非常小:在 Debian 家目錄新增文件 nano ~/.Xdefaults 內容爲 Xft.dpi: 192 即指定 dpi 分辨率爲 192。如果個別應用字體還是很小,可以嘗試通過應用自己的配置來調整顯示大小。顏色深度也可以在這裏配置,例如:Xft.depth: 16

剪切版:從 Debian 到安卓默認是沒問題的,除非你在 X11 的配置項裏禁用了。但是從安卓到 Debian 卻不輕鬆。目前一個可行的方案就是上面使用 xclip 的方式:首先切換到 Termux,運行 alias pp,然後就可以在 Debian 裏粘貼了。

中文輸入:本篇沒有安裝中文輸入法,以節省更多資源予 VSCode。

掛載外部 SD Card 到 Debian:啓動時加入 --bind /data/data/com.termux/files/home/storage/external-1:/sdcard1 就會將外部儲存卡的可用目錄掛載到 proot 系統裏的 /sdcard1。手機裏的內部儲存默認是掛載在 /sdcard 的。

本文更新於 2024/03/03。

分類
软件

Paseo 步數記錄軟件

散步是人生中的大事,而 Paseo 可以記錄與督促它。祝大家都有一個健康的體魄。

上個月,F-Droid 被 DNS 污染,這個月遭遇不同程度屏蔽。

分類
软件

使用 Screen Stream 來分享安卓屏幕

Screen Stream 是一款由 Dmitriy Krivoruchko 開發的老牌(始於 2016 年)開源安卓屏幕共享軟件。使用方便,還支持中文,推薦有需要的朋友使用。

它主要是局域網共享屏幕,甲手機打開軟件,點擊開始即可。然後乙手機,在瀏覽器裏輸入甲手機的網址(或掃碼)就可以觀看了。就是這麼簡單!如果想要通過因特網分享屏幕,那麼你得確保你有公網 IP,使用方法是一樣的。

通過調教幀率和畫質,可以減輕手機網絡和性能消耗(少發一點熱)。通過設置安全選項,可以控制只通過 WiFi 網絡分享(即不通過手機網絡分享)或者只在本機分享(相當於是程序接口)。

通過服務器實現屏幕共享

由於沒有公網 IP,又想要分享屏幕給遠方親友,則可以通過服務器來實現。思路有很多,我有實現一個非常簡單辦法。對分享一方來說,可以通過 Termux 來把圖片 Post 到服務器,服務器收到圖片後展示出來即可。所用的 Termux 命令爲:

watch -n 3 "curl http://127.0.0.0.1:8080/stream.jpeg | curl -k -s -X POST --data-binary @- https://my.image.server/image_in"
#即每隔 3 秒,把圖片傳送到服務器一次

我的圖片服務是一個簡單的 Django 網站,免費部署在 pythonanywhere,等我有空了可以把代碼整理下發出來。我也測試過讓甲通過瀏覽器,用 Javascript 來把圖片轉發到服務器,Chrome 下是可以的,但是火狐裏網頁一到後臺,JS 就停止工作,搜了一下也沒找到火狐網頁保活的辦法。

理論上,把視頻流直接轉發到 Nginx,應該更加高效流暢,但是我沒有測試過。

分類
软件

Anuto TD 一個塔防遊戲

Anuto TD 是一款製作精良的塔防遊戲,它「浪費」了我很多時間!

分類
方法

通過 ICS 文件給日曆增加農曆

很長一段時間以來,我一直受沒有農曆可用的困擾。安卓原生的日曆不支持農曆,谷歌日曆也是到了安卓 8 才開始有農曆,等我用到安卓 8 的時候我已經開始去谷歌化了。轉用開源日曆應用(Etar)後也沒有發現很好的辦法來解決農曆的問題,主要是曆法這東西真的很複雜。終於在最近找到了一個方案,通過 ICS 文件把計算好的農曆導入日曆就可以了。我這裏提供了從 2017 年 01 月 01 日到 2049 年 12 月 31 日的農曆和節氣與公曆對應關係的 ICS 文件,只要選擇需要的年份導入日曆即可。 這些 ICS 文件是基於 infinet 開發的 lunar-calendar 項目生成的,其原始日期數據來自於香港天文台的公曆與農曆日期對照表。我在使用的時候將節氣和生肖做了繁體中文的轉換,並且刪減了一些不展示在日曆中的文本以減小文件大小。我修改後的腳本也可以在上面的分享文件夾中找到。

順便說下我這邊具體是怎麼導入的:我一直在用 Disroot 提供的 Nextcloud 實例,其中有日曆的功能,而我之前就已經在安卓上通過 DAVx⁵ 來同步日曆和聯繫人了。所以我是在電腦上通過瀏覽器來操作的,理論上在手機上也是類似的。日曆網頁的左側點「新日曆」選擇「新日曆」輸入名稱就創建好了新日曆了,如「農曆」。然後點擊左下角的「設定及匯入」-「匯入日曆」,選擇 ICS 文件然後選擇要匯入的日曆即「農曆」。最後耐心等待一番,因爲我通過網絡請求看到農曆竟然是一條一天這樣傳的,我的文件都是三年三年的,所以要耐心等它傳完,傳完後點擊一下「農曆」左側的開關就可以看到農曆了。手機上同步前先從菜單中「刷新日曆列表」就會出現「農曆」,再來同步就可以在日曆裏看到農曆和節氣了。

當然你也可以通過 Calendar Import-Export 將 ICS 文件導入本地日曆。

本文更新於 2023/03/06。

分類
软件

使用 Send Reduced 來減小圖片大小

Send Reduced 雖然只有區區 52 KB,但是卻有兩個非常好用的功能——壓縮照片和清理 Exif 數據。現在安卓手機照片越來越大,動輒一張照片就八九 MB,但是選擇 85% 的壓縮比壓縮後,圖片大小就只剩下六百多KB,肉眼也沒有可見的畫質損失,很適合發送給聯繫人和社交媒體。

不過也有一個小小缺陷,就是壓縮後的最大尺寸是個選項列表,最大的選擇是 2560,如果你一定要選擇大於此尺寸的圖片,就不能用它不行了。

分類
软件

安卓截屏軟件 Screenshot Tile

截图瓷贴 Screenshot tile(NoRoot)是一個方便的截圖軟件,它可以在快速設置面板(從屏幕頂端下滑即出現)中添加一個截圖的按鈕。我的手機用電源鍵和音量鍵截圖會有咔嚓一聲快門音,但是用這個軟件就不會。還可以設置爲先選截圖區域再執行截圖動作,這樣只截取重點區域而防止頂部狀態欄泄露隱私。看介紹還可以和一些自動化軟件聯動實現連續截圖,這個我就沒試過了。截图瓷贴要求安卓 7 以上的系統。