分類
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。

分類
软件

nginx 默認配置下載文件 403

裝了個 nginx 臨時分享一下文件,但是文件複製到 /usr/share/nginx/html 中後訪問卻提示 403。排除防火牆、文件權限和所有者的問題後,發現是 SElinux 的原因。

#查看 SELinux 上下文
ls -lZ
#大概是這樣的
-rw-r--r--. 1 root root system_u:object_r:httpd_sys_content_t:s0     3086 Jan 28 13:39 index.html
-rwxr-xr-x. root root unconfined_u:object_r:user_home_t:s0 ToBeShared.zip
#只要 user_home_t 改成 httpd_sys_content_t 就可以了
sudo chcon -t httpd_sys_content_t ToBeShared.zip

更多參考:Nginx 403 error for single file while others workSELinux documentation from RedHat

分類
软件

Paseo 步數記錄軟件

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

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

分類
软件

Proton VPN stops network after suspend in Fedora

Proton VPN的免費用戶有日本、荷蘭和美國三個國家的節點可供使用,安卓用戶可以從 F-Driod 下載官方客戶端,Fedora 需要先在添加軟件源然後就可以方便安裝。使用的方便程度以及免費節點的速度都非常好。但是牆內直接是用不了的。

有一個問題是,在Fedora 中,連接着 Proton VPN 的時候 Suspend,然後喚醒的時候有機率會網絡不通,其實是 Proton VPN 異常關閉導致的。Proton VPN 生成了一個包含 ipv6leak 的連接,用來防止泄露 IP,但是異常關閉的時候,卻沒來得及刪除它,所以網絡都斷了。可以嘗試這樣解決:

#list all the links, find the link contains 'ipv6leak'
ip link
#remove the link
sudo ip link delete ipv6leakintrf0

值得一提的是,如果你同時有使用 NextDNS,DNS 也可能成爲網絡中斷假象的原因之一。測試辦法有兩個,一是使用 Tor 打開任意網頁,因爲 Tor 並不依賴系統的 DNS 設置,如果能上網證明本地 DNS 可能有問題。二是使用 dig 命令,如果運行 dig ft.shaman.eu.org 返回 no servers could be reached 但是運行 dig ft.shaman.eu.org @45.90.28.136( 牆內可用 114.114.114.114 )返回正確 IP 地址,則也證明 DNS 可能有問題。可嘗試重啓 NextDNS 來解決:

nextdns restart
分類
软件

使用 Shelter 把老大哥的應用隔離起來

我在索尼手機上已經使用 Shelter 很久了,不用 Root,隔離應用,簡單有效。

把不常用的應用裝到『工作模式』,使用時打開,不用時凍結。即使需要給予那些應用一些敏感權限,但是工作模式有自己的通訊錄等資料,所以也無需太擔心。也可以設置自動凍結,但是我沒有試過。

掃描工作模式中新增的媒體

有一個問題是,當我從主要模式複製了照片到工作模式(如微信),但是從工作模式的應用里卻看不到那張照片(打開朋友圈里的相冊卻看不到這張照片)。這時需要觸發一下系統的媒體掃描,在沒有安裝額外應用的情況下,似乎只能通過重啓手機來觸發。但是好在有應用可裝,那就是 SD Scanner。把它安裝在工作模式,按一下 START RESCAN 就可以了。雖然這個應用的最後更新日期是 2017 年,但它在安卓 10 的系統上仍然能工作的很好。我沒有更新系統的手機,如果 SD Scanner 無法在更新系統的手機上使用,你可以嘗試下載一個叫 AZ MediaScaner 的閉源軟件,它是最近更新的,但是它有用戶跟蹤。

分類
软件

轉用 Visual Studio Code

之前無論是 PHP、Java 還是 Python,我都使用 Eclipse 這款開源的老編輯器。直到最近因爲種種原因切換到了 Visual Studio Code。

其中最重要的一點是,我的網絡成本增加,使用 Visual Studio Code 的遠程模式( Remote Development using SSH ),可以在服務器上編程與調試,節省了很多流量。遠程還有一個優點是網絡質量比本地更好,比如安裝編譯安卓應用所需的谷歌依賴,那些動輒上 GB 大小的依賴,再也不必考慮代理的問題。

我還是習慣於用 python -m venv project_venv 的方式建立項目專用的虛擬環境,VS Code 會自動識別項目中的虛擬環境,很方便。

代碼檢查與美化( linting )也是開箱即用。Eclipse 雖然可以自由配置多種 linter,但是我費了很多心力都不得其法。

在離開 Eclipse 前給他們捐了一點錢,我還是很樂意再用回去的,如果 Eclipse 能在日常編程體驗上追上其他編輯器。前不久還收到一個 Eclipse 用戶調查,我甚至看不懂他們新產品是做什麼的,可能我就快要被編程行業所淘汰了……

分類
软件

使用 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,應該更加高效流暢,但是我沒有測試過。