有些 Android 開發者製作了,例如 Linux Deploy 可以安裝不同 Linux發行版
但 Android裝置 的需要具有 root 權限才能使用,正常運作
由於一般 Android 內建的 虛擬鍵盤 輸入工具,並沒有像一般鍵盤的操作按鈕,如 Ctrl 、 Alt 、 Esc 之類控制按鈕
在安裝 UserLAnd 前先安裝 具備控制按鈕 的鍵盤方便輸入
#################### Hacker's Keyboard ####################
到 Play Store 搜尋及安裝 Hacker's Keyboard 這個具備控制按鈕的虛擬鍵盤
開啟 Hacker's Keyboard
按下 Enable keyboard 並啟用 Hacker's Keyboard
Android 會發出警告,指這類 第三方輸入工具,有機會在閣下輸入時盜取資料
按下 Set Input Method 並選擇 Hacker's Keyboard
留意
Hacker's Keyboard 在畫面 直向 時鍵盤的功能並不完全
需要在畫面 橫向 時才有完全功能
若閣下有可連接 Android 裝置的鍵盤亦可使用 實體鍵盤
在下是使用 藍芽鍵盤 與 Android 裝置配對
掃瞄 藍芽裝置
Android 裝置與 藍芽鍵盤 配對
Android 裝置與 藍芽鍵盤 連接
#################### UserLAnd ####################
正式搜尋及安裝 UserLAnd
啟動 UserLAnd 的畫面
在 Session 的分頁
在 Session Name 輸入 Session 名稱,及在 Filesystem 選擇 檔案系統
若第一次使用需要 建立檔案系統,按 Create New 或到 Filesystems 分頁
在 Filesystem Name 輸入 檔案系統名稱
UserLAnd 暫時只提供 Debian 的 Filesystem 類型
完成後按右上的 儲存按鈕
Client Type 當 Service Type 選擇
ssh 自動選擇 ConnectBot
vnc 自動選擇 bVNC
Username 自動選擇 user
Session 的設定正確亦可以按右上的 儲存按鈕
顯示已建立的 Session
按下已建立的 Session
同意 UserLAnd 的使用權限
第一次運行需要下載 Filesystem 及設定資料,需要一段時間
預設使用者帳戶 user 密碼 userland
Session 正式運作後會顯示 綠色圖示
按著已運作的 Session 可以按 Kill Service 停止 Session 運作
按著已停止運作的 Session 可以按 Delete 刪除 Session
Filesystem 亦可以以同樣方式刪除
由於 UserLAnd 已經預載 Dropbear SSH伺服器
其實可以在電腦連接 Dropbear 可能更方便
但若果閣下沒有電腦,便需要使用在 Android 上運行的 SSH工具
#################### ConnectBot ####################
若 Android 未安裝 ConnectBot 會自動開啟 Play Store 到 ConnectBot 的頁面
安裝 ConnectBot
開啟 ConnectBot
到 更多選項 ,點選 Settings
由於在下希望畫面能以 橫向 顯示,點選 Ratotion mode
點選 Force Landscape
若閣下 Android 裝置的畫面不大,可以啟用 Autohide title bar 及 Full screen 用盡整個畫面
按下 右下角 的新增按鈕
設定連接的 SSH伺服器 ,資訊為 user@127.0.0.1:2022
建立 SSH 連接
同樣 UserLAnd 已經預載 VNC伺服器
其實可以在電腦連接 VNC 可能更方便
但若果閣下沒有電腦,便需要使用在 Android 上運行的 VNC工具
#################### bVNC ####################
Android 未安裝 bVNC 會自動開啟 Play Store 到 bVNC 的頁面
安裝 bVNC
開啟 bVNC
有使用說明,按 Close 關閉使用說明
VNC Server 為 127.0.0.1
Port 為 5951
VNC Username 為 user
VNC Password 為 userland
其餘使用預設值即可
設定後按 Connect 連接 UserLAnd 的 VNC伺服器
UserLAnd 使用 xterm 作為預載 VNC伺服器
雖然能使用遊標操作,但並不容易使用,功能又很少,主要仍然是以指令操作為主
若需要離開 xterm 按一下畫面,會出現 更多選項 並點選 Disconnect 便會離開
#################### 連接 Dropbear SSH 伺服器 ####################
按 YES 確認連接 SSH伺服器
輸入 userland 登入 (大小寫相符)
登入至 UserLAnd
#################### 登入後基本設定 ####################
輸入
su以 root 身份登入
由於剛才是以 user 登入,被免在 user的家目錄 中建立檔案不屬於 user 的檔案,因此輸入
cd讓 root 回到 root的家目錄
輸入
passwd設定 root 的 密碼
方便讓 SSH工具 直接以 root 登入
若果需要登出,可以輸入
exit然後按 YES 即可
(由於先登入 user 再登入 root ,因此示範需要登出兩次)
或到 右上角 的 更多選項
點選 Disconnect ,亦可以登出
輸入
echo 'DPKG::Progress-Fancy 1;' >'/etc/apt/apt.conf.d/99progressfancy'與先前的文章相同,讓使用 apt-get 時顯示進度表
只是方便了解進度,不一定需要設定
注意:確保正在使用 root
輸入
file='/etc/apt/sources.list' mv "${file}" "${file}.bak" cat "${file}.bak" | sed -r 's/stable/buster/g' >"${file}" apt-get update由於在下使用 UserLAnd 時, Debian 已經發佈了 buster (Debian 10) 的來源
因此修改 /etc/apt/sources.list 使用最新的 Debian 來源
並更新軟件資料
(例如將來源的 stable 改成 buster ,最新未必是使用 buster , 注意大小寫)
輸入
apt-get upgrade升級軟件
輸入
apt-get dist-upgrade升級發行版軟件
輸入
apt-get install apt-utils bash-completion bzip2 curl dialog file iputils-ping net-tools p7zip* nano vim wget安裝一些在下認為實用的軟件
若閣下認為沒有必要可以略省,或有需要亦可以安裝更多適合閣下使用的軟件
輸入
dpkg-reconfigure tzdata設定時間資料
設定時區及地方
例如在下身處 亞洲 香港
若想自動設定,輸入
timezone='Asia/Hong_Kong' echo "${timezone}" >'/etc/timezone' file='/etc/localtime' rm "${file}" ln -s "/usr/share/zoneinfo/${timezone}" "${file}"
輸入
apt-get install fonts-arphic* locales w3m安裝中文字型 、 語言 、 w3m網頁瀏覽器
同樣,有需要可以添加更多中文字型
輸入
dpkg-reconfigure locales設定語言資料
建議點選 en_HK.UTF-8 、 en_US.UTF-8 、 zh_HK.UTF-8 、 zh_TW.UTF-8 設定語言資料
設定系統語言,建議使用 en_US.UTF-8
同樣可以使用自動設定,輸入
file='/etc/locale.gen' encoding='UTF-8' for language in 'zh_TW' 'zh_HK' 'en_HK' 'en_US'; do echo "${language}.${encoding} ${encoding}" >>'/etc/locale.gen' done echo LANG="${language}.${encoding}" >'/etc/default/locale' locale-gen
設定語言後輸入
locale可顯示選用的語言
雖然安裝完成,但仍然未選用任何語言,語言資料使用 POSIX
輸入
w3m www.google.com.hk用 w3m網頁瀏覽器 測試中文能否顯示
中文未能正確顯示,未能顯示的中文字型以 ? (問號) 顯示
按下 q 再按 y 離開 w3m網頁瀏覽器
輸入
LANG=en_US.UTF-8 w3m www.google.com.hk臨時以 en_US.UTF-8 的編碼執行 w3m網頁瀏覽器 測試中文能否顯示
終於能正常顯示中文字型
輸入
export LANG=en_US.UTF-8將此 Session 的語言設定為 en_US.UTF-8
若想每次登入 UserLAnd Debian 時都自動以 en_US.UTF-8 為預設語言,輸入
echo "export LANG=en_US.UTF-8" >"${HOME}/.bashrc"重新執行 UserLAnd Debian 才能生效
(留意:需要不同帳戶登入都自動設定,需要在每個帳戶的 ${HOME}/.bashrc 都加上 export LANG=en_US.UTF-8
輸入
locale發現自動設定為 en_US.UTF-8
#################### Samba ####################
輸入
apt-get install samba smbclient安裝 Samba 及 smbclient
輸入
smbpasswd -a root設定 root 的 Samba 密碼
密碼可與 SSH伺服器 的 登入密碼不同
有需要亦可以設定其他帳戶的密碼
輸入
nano /etc/samba/smb.conf編輯 Samba設定檔
(不一定使用 nano ,任何 文件編輯器 亦可)
將 [homes] 的設定範圍的 ; (分號) 刪除,以啟用 homes 的設定資料
將 read only 修改為 no ,讓登入帳戶能寫入資料
將 create mask 修改為 600 ,當上載檔案後之有使用者具只有 讀取 及 寫入 權限
並按 Ctrl X 離開文件
由於文件曾經修改會詢問是否需要儲存,按 y 確認
詢問是否寫入至原檔案,按 ENTER 儲存並離開
輸入
service smbd restart重新啟動 Samba
測試 Samba
輸入
smbclient //127.0.0.1/homes --user=user --port=2445並輸入 Samba帳戶 的密碼登入
(UserLAnd 將所有 少於1024的預設連接埠 都需要加上 2000
例如 Samba 原本使用 445 ,在 UserLAnd 中使用 Samba 會強制改成使用 2445)
輸入
ifconfig獲得 Android 的 IP
若沒有 ifconfig 亦可以到 Settings > About tablet > Status > IP address 找到 IP
測試使用 相同網路的電腦 登入 Samba
#################### ProFTPD ####################
輸入
apt-get install proftpd-basic ftp安裝 ProFTPD 及 ftp
安裝後,輸入
service proftpd restart重新啟動 ProFTPD
測試 ProFTPD
輸入
ftp 127.0.0.1 2021發現 root 不能登入,但 user 卻能登入
輸入
nano /etc/ftpusers編輯 /etc/ftpusers 設定檔
/etc/ftpusers 能 禁止登入 設定檔中的帳戶
若需要 允許登入 root 便需要將 root 從設定檔 移除
(使用 # (井號) 令 root 成為 備註 亦可)
輸入
nano /etc/proftpd/proftpd.conf編輯 /etc/proftpd/proftpd.conf 設定檔
在 /etc/proftpd/proftpd.conf 中加入
<Global> RootLogin on </Global>完成後儲存及離開,並重新啟動 ProFTPD
能夠以 root 登入 ProFTPD
測試使用 相同網路的電腦 登入 ProFTPD
若需要傳輸資料,在登入 ProFTPD 後,需要先執行 passive 切換為被動模式才能操作
FTP伺服器能讓外部網路存取,但需要 對外連接IP
再次修改 /etc/proftpd/proftpd.conf
將 MasqueradeAddress 改為 0.0.0.0
完成後儲存及離開
輸入
curl ifconfig.io從 ifconfig.io 獲得 對外連接IP
重新啟動 ProFTPD
顯示以 對外連接IP
如果需要由外部網路連接,便需要在 Router 設定 DMZ 或 Port Forwarding ,讓指定電腦及連接埠能從外部連接
在下不打算將 DMZ 指向 Android 裝置,因此會使用 Port Forwarding
本來 FTP預設連接埠 為 21 ,同樣因為 UserLAnd 關係,被強制使用 連接埠2021
因此設定 Port Forwarding 為 Android 的內部 IP 及 TCP連接埠 為 2020 至 2021
以外部網路測試,顯示登入成功
除了直接編輯 /etc/proftpd/proftpd.conf ,亦可以到 /etc/proftpd/conf.d 的目錄中增加需要的設定檔
例如設定 MasqueradeAddress 可以建立 /etc/proftpd/conf.d/MasqueradeAddress.conf 輸入設定值,同樣可以達到相同效果
由於 /etc/proftpd/proftpd.conf 於設定檔最後位置才導入 /etc/proftpd/conf.d 的設定檔
若有相同設定資料,會以 /etc/proftpd/conf.d 的設定檔為最後設定值
#################### CUPS ####################
輸入
apt-get install cups lpr
輸入
service cups stop停止 CUPS
然後輸入
service cups start啟動 CUPS
因為 CUPS 會發生啟動後無法回到指令操作,需要按 Ctrl Z 返回指令操作
因此不直接使用 restart 來重新啟動 CUPS
使用 網頁瀏覽器 瀏覽 http://127.0.0.1:2631 到 CUPS設定介面
到 Edit Configuration File 修改 /etc/cups/cupsd.conf 設定檔
將 Listen 改為 631
及在 Order allow,deny 或 Order deny,allow 下一行加入 Allow from all 讓何任人都能夠存取 CUPS設定介面
但相對會比較危險,亦可以限制讓 特定IP 或使用 Deny from 允許或阻止存取
另外還要留意 Order 的次序, Order deny,allow 先阻止特定資料,再允許特定資料, Order allow,deny 先允許特定資料,再阻止特定資料
如果阻止與允許的資料沒有衝突,先後次序沒有分別,但有衝突時便需要考慮次序
例如
Order deny,allow Allow from all Deny from 10.6.8.*因為 deny 比 allow 前, Deny from 10.6.8.* 會被 Allow from all 覆蓋,導致 Deny from 10.6.8.* 變得無意義
Order allow,deny Allow from all Deny from 10.6.8.*因為 allow 比 deny 前,所以會先允許資料,再阻止 10.6.8.*
Allow from 及 Deny from 的次序不影響 Order 的次序
修改完成後,按 Save Changes
需要登入 擁有管理員權限 的帳戶才能更新設定,並會強制以 HTTPS 連接
CUPS 正在更新設定並自動重新啟動
到 Add Printer 選擇需要安裝的 印表機
設定 印表機 的 名稱
其他如 Description 、 Location 可以不設定
若不打算分享 印表機 亦可以不啟動 Sharing 功能
選擇合適安裝的 驅動程式
如果在建議清單中沒有需要安裝得驅動程式,便要到 https://www.openprinting.org/download/PPD/ 尋找
設定 印表機 預設操作資料
按 Set Default Options 來完成設定
完成設定
按 Maintenance 的 Print Test Page 測試 列印
將測試列印的頁面,經 CUPS 傳送資料到 印表機
CUPS網絡介面 顯示正在準備列印的資料
已列印的資料會隱藏
可以 Show Completed Jobs 或 Show All Jobs 顯示 已完成列印 或 所有列印 資料
測試頁
列印文件測試
在下直接到網上尋找文件測試
w3m 'www.google.com.hk/search?q=the c programming language filetype:pdf'若閣下已有需要測試的文件,便直接使用閣下的文件
輸入
lp -d 'printer-name' -o page-ranges=1 'file'printer-name 是印表機名稱
-o page-ranges=1 是只列印文件的第1頁,若果只是進行測試,避免列印整份文件
file 是列印文件的檔案名稱,若果文件有空格,必須以 ' (單引號) 或 " (雙引號) 包著檔案名稱
lp 還有其他列印選項,可以到 CUPS.org 的 Command-Line Printing and Options 網頁查看詳細操作方法
列印文件的效果
亦可以簡單地列印 標準輸出 測試
輸入
echo 'hello, world' | lp -d 'printer-name' -o page-ranges=1
#################### Transmission ####################
輸入
apt-get install transmission-daemon安裝 Transmission Daemon
Transmission Daemon 能以系統服務運作,設定檔會建立在 /etc/transmission-daemon/settings.json 中
Transmission Daemon 除了能以系統服務運作,還可以因應不同帳戶運作
輸入
transmission-daemon for pid in `pidof 'transmission-daemon'`; do kill "${pid}"; done nano "${HOME}/.config/transmission-daemon/settings.json"先執行一次 Transmission Daemon 讓系統自動建立預設的 Transmission Daemon 的設定資料
但預設資料並不一定適合使用,因此執行 kill 將 Transmission Daemon 停止
再編輯 ${HOME}/.config/transmission-daemon/settings.json Transmission Daemon 設定檔
Transmission Daemon 設定檔使用 JSON 格式
有很多設定資料,可以簡單為
{ "download-dir": "~/Downloads", "rpc-enabled": true, "rpc-authentication-required": true, "rpc-username": "username", "rpc-password": "password", "rpc-url": "/transmission/", "rpc-port": 9091, "rpc-whitelist-enabled": false }download-dir 設定 下載資料位置 ,預設使用 家目錄的Downloads
rpc-enabled 設定啟動 Remote Procedure Call (RPC) ,預設啟動
rpc-authentication-required 設定啟動 RPC認證 ,預設啟動
rpc-username 設定 RPC帳戶名稱 ,不需要與登入帳戶相同
rpc-password 設定 RPC帳戶密碼 ,不需要與登入密碼相同,當密碼不是 { 字頭,當 Transmission Daemon 運作時,會自動加密
rpc-url 設定 RPC路徑 ,預設使用 /transmission/
rpc-port 設定 RPC連接埠 ,預設使用 9091
rpc-whitelist-enabled 設定啟動 RPC白名單 ,預設啟動
使用 網頁瀏覽器 瀏覽 http://127.0.0.1:9091/transmission/
輸入設定資料的 RPC帳戶名稱 及 RPC帳戶密碼
然後按 SIGN IN
登入 Transmission Daemon
Transmission Daemon 除了能上載本機的 Torrent
還可以直接將 Torrent 的連結加入至 Transmission Daemon
Destination folder 預設為設定資料的位置
Start when added 當 Torrent 加入至 Transmission Daemon 會自動開始下載資料
在 下載資料位置 找到 Transmission Daemon 下載的資料
#################### Sendmail ####################
輸入
apt-get install sendmail telnet安裝 Sendmail 及 Telnet
由 Debian 提供的 Sendmail 已經設置妥當,已經可以直接使用及測試
輸入
telnet localhost 2025 ********** EHLO localhost ********** MAIL FROM: root@localhost ********** RCPT TO: recipient@domain ********** DATA Subject: This is subject This is body . ********** QUIT當中的 ********** (星號串) 是由 Sendmail 產生的 回應碼 及 資訊
telnet localhost 25 是 Sendmail郵件伺服器 位置,使用本機連接
EHLO localhost 呼叫 Sendmail
MAIL FROM: root@localhost 設定送件者郵件位置,必須填寫
RCPT TO: recipient@domain 設定收件者郵件位置,最少填寫1個
DATA 開始編寫郵件內容
Subject: This is subject 及 This is body 分別是 郵件主題 及 郵件內容
當編寫完成後需要在最後編寫 . 及 換行 結束
QUIT 完成發送郵件後,離開 Telnet
由於使用 個人郵件伺服器 通常都沒有認證 , 因此通常 郵件服務提供者 都會視這些郵件當作 垃圾郵件
甚至不會接收這類郵件
另外亦需要確定閣下的 網絡服務提供者 允許閣下能使用 SMTP 才能 對外發送郵件
#################### Git ####################
輸入
apt-get install git-core安裝 Git
與在下的 自建簡單 Git 伺服器 操作完全相同
#################### PHP SQLite3 ####################
輸入
apt-get install php sqlite3 php-sqlite3安裝 PHP 及 Sqlite3
輸入
echo -n '<?php phpinfo(); ?>' >'phpinfo.php'製作一個簡單的 PHP 測試頁
輸入
php -S 127.0.0.1:8080可以執行 臨時網頁伺服器 ,按 Ctrl C 可以停止 臨時網頁伺服器 運作
由於使用 127.0.0.1 只能讓本機查看
以 Android 裝置的 網頁瀏覽器 到 http://127.0.0.1:8080 查看
若需要讓其他裝置都能瀏覽頁面,將 IP 改為 0.0.0.0 即可,與 ProFTPD 相同
php -S 0.0.0.0:8080
以 相同網路 裝置瀏覽該頁面
以 外部網路 裝置瀏覽該頁面
當然還要到 Router 設定 DMZ 或 Port Forward
輸入
sqlite3 test-sqlite3.db CREATE TABLE `user` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` VARCHAR2(4) NOT NULL); INSERT INTO `user` (`name`) VALUES ('Mr.A'); INSERT INTO `user` (`name`) VALUES ('陳大文'); .exit使用 SQLite3 指令建立 sqlite3資料庫檔案 、 sqlite3資料表 及 加入資料
資料庫 、 資料表 、 資料 可以按閣下的需要調整
詳細 SQLite3指令 可以到 https://www.sqlite.org/cli.html 及 https://www.sqlite.org/lang.html 查看
輸入
nano test-sqlite3.php製作連接 SQLite3資料庫 的 PHP 測試頁
輸入
<?php $connection = new SQLite3('test-sqlite3.db'); $result = $connection->query('SELECT * FROM `user`;'); while (($row = $result->fetchArray(SQLITE3_ASSOC)) !== false){ print_r($row); } $result->finalize(); $connection->close(); ?>然後儲存及離開
顯示結果
MariDB 及 PostgreSQL 在安裝時發生錯誤
由於 MariaDB 的 /usr/sbin/mysqld 出現 segmentation fault 導致 MariaDB伺服器 不能起動
而 MariaDB 的官方網頁亦表示 沒有提供支援 ARMhf 架構
因此在下下載 MariaDB 的源始碼自行編譯,但最後出現相同的錯誤
網上有提供 Maria for ARM 的 Docker 但在下並未測試
PostgreSQL 則出現 FATAL: could not create shared memory segment: Function not implemented
看似由於 UserLAnd 未能提供 share memory 導致 PostgreSQL 不能起動
因此在下亦沒有詳細測試
若閣下能在 UserLAnd 解決 MariaDB 或 PostgreSQL 起動問題,請告知在下
#################### NextCloud ####################
輸入
wget 'http://download.nextcloud.com/server/releases/latest.tar.bz2' -O 'nextcloud.tar.bz2' tar jxvf 'nextcloud.tar.bz2'下載 NextCloud 及解壓縮
解壓縮後,輸入
cd 'nextcloud' php occ maintenance:install --database 'sqlite' --admin-pass 'password'由於不能使用 MySQL 或 MariaDB 或 PostgreSQL 安裝 NextCloud ,因此需要使用 PHP指令 安裝
--admin-pass 為設定 NextCloud 管理員的密碼,若不在執行時加上會以互動方式設定
由於 NextCloud 需要使用 php-zip 、 php-xml 、 php-mbstring 、 php-gd 、 php-curl
若未安裝,輸入
apt-get install php-zip php-xml php-mbstring php-gd php-curl
再輸入 php occ maintenance:install --database 'sqlite' 安裝
安裝時需要設定 admin (管理員) 帳戶密碼
完成後,輸入
php -S 127.0.0.1:8080起動 NextCloud 測試
SQLite 的資料庫檔案會存放在 NextCloud 的 data 目錄中的 owncloud.db
(NextCloud 的前身是 OwnCloud)
備份相當容易
使用 網頁瀏覽器 瀏覽 http://127.0.0.1:8080/index.php
登入並初始化 NextCloud
第一次登入 NextCloud 會顯示歡迎使用訊息
NextCloud 有提供 Android 及 iOS 的 的 應用程式
使用 NextCloud應用程式 能較方便操作
執行 NextCloud應用程式
在 Server address https:// 輸入 127.0.0.1:8080
雖然寫著 https:// 但即使不使用 HTTPS 亦可以
按 Grant access 給予裝存取 NextCloud應用程式 權限
經 NextCloud應用程式 登入 NextCloud
允許 NextCloud應用程式 存取裝置檔案
載入至 NextCloud
#################### Neofetch ####################
輸入
file='/etc/apt/sources.list' echo '' >>"${file}" echo 'deb http://dl.bintray.com/dawidd6/neofetch buster main' >>"${file}" curl 'https://bintray.com/user/downloadSubjectPublicKey?username=bintray' | apt-key add apt-get update apt-get install neofetch
安裝後輸入
neofetch便可以顯示 ASCII Art 的 Debian 圖示及系統資料
#################### Webmin ####################
由於 UserLAnd 運行 Debian ,可以使用 Webmin 協助管理
輸入
w3m www.webmin.com到 www.webmin.com Webmin 的官方網頁
進入 Download Webmin 的 Debian Package 頁面
下載 webmin*.deb
下載完成後離開
閣下亦可以使用 wget 之類直接輸入下載位置,省卻瀏覽過程
輸入
dpkg -i webmin*.deb安裝 Webmin 但中途卻因為卻少部分 相依軟件 ,未能安裝
輸入
apt-get -f install讓 Debian 自動修正 相依軟件 問題及重新安裝 Webmin
Webmin 還可以使用 apt-get 方式安裝,安裝時會自動處理 相依套件
而且這種安裝方式還可以自動下載及更新最新版本
先輸入
apt-get install gnupg安裝 GPG ,再輸入
file='/etc/apt/sources.list' echo '' >>"${file}" echo 'deb https://download.webmin.com/download/repository sarge contrib' >>"${file}" curl 'http://www.webmin.com/jcameron-key.asc' | apt-key add apt-get update apt-get -y install webmin
完成安裝 Webmin 後輸入
service webmin restart重新啟動 Webmin
使用 網頁瀏覽器 瀏覽 https://127.0.0.1:10000
由於 Webmin 使用自簽證書,出現安全問題
按 ADVANCED 再按 Proceed to 127.0.0.1 (unsafe) 迴避安全問題
顯示 Webmin 的登入頁面
需要使用 擁有管理員權限 的帳戶登入
顯示系統的 CPU用量 、 記憶體用量 、 儲存空間 等資訊
一些 Android 裝置還有 Virtual Memory (虛擬記憶體)
#################### XServer XSDL ####################
由於使用指令操作的確有或多或少的困難,雖然有不少 網頁介面 協助
但有 圖像使用者介面 (GUI) 還是比較方便
到 Play Store 安裝 XServer XSDL
第一次執行 XServer XSDL 會提示安裝字型
在下建議安裝
點選 Additional fonts 後按 OK
下載字型
安裝 XServer
安裝完成後,預設會以
原生解像度 (在下的 Android 原生解像度為 1920x1200)
0.7倍 字型大小
系統鍵盤 作為輸入工具
若不修改設定,會在5秒後以上次設定值執行 XServer XSDL
設定解像度
或選擇 custom 自訂解像度
設定字型大小
在下建議使用 1920x1200解像度 ,使用 0.3倍 字型大小
使用預設的 0.7倍 在 1920x1200解像度 會太大
設定輸入工具
可以使用預設值
XServer XSDL 在 準備狀態
會以(恐怖的)藍底白字顯示操作說明
#################### LXDE ####################
由於一般 Android 裝置硬件能力不高,因此使用較少硬件需要的 LXDE
輸入
apt-get install lxde安裝 LXDE
lxde 為完全安裝的 LXDE ,若只需要基本安裝可以將 lxde 修改為 lxde-core 體積較小,安裝時間亦較短
安裝途中會查詢安裝的鍵盤模式,建議使用 English US
查詢是否將帳加入至 netdev 群組
Wicd 是 Wireless Interface Connection Daemon 的簡稱
像 NetworkManager 之類提供 管理網絡 的功能
雖然名稱為 Wireless (無線) 但事實上 Wicd 亦能夠管理有線網絡
讓加入至 netdev 的帳戶能夠 管理網絡
安裝完成後,輸入
export DISPLAY=:0 startlxde將 畫面 匯出,並啟動 LXDE
回到 XServer XSDL 便接收並顯示 LXDE 的介面
使用者可以使用 藍芽滑鼠 移動遊標,方便操作
若要關閉 GUI 回到 ConnectBot 按 Ctrl C 停止 startlxde 便可以,不需要在 GUI 執行 關機 或 登出 操作
實作效果
#################### LibreOffice Online ####################
由於 Debian 10 的 Node.js 套件 不包含 Node Package Manager (npm)
因此需要使用由 Node.js 官方提供的套件
輸入
curl -sL 'https://deb.nodesource.com/setup_10.x' | bash -加入由 Node.js 官方提供的 Node.js 套件來源
輸入
apt-get install automake g++ git libboost-dev libcap-dev libcppunit-dev libkrb5-dev libpam0g-dev libpng-dev libpoco-dev libreoffice libreoffice-dev libseccomp-dev libtool m4 make nasm nodejs pkg-config python-polib
留意
Debian 10 的 libpoco-dev 、 libreoffice 、 libreoffice-dev 才能編譯 LibreOffice Online
否則需要用極多時間編譯 POCO 及 LibreOffice
(參巧:NextCloud 與 LibreOffice Online 整合)
安裝 Node.js 後同樣需要安裝 npm 的 jake套件
輸入
npm install jake
由 Debian 提供的 libpoco-dev 的檔案放在 /usr/lib/libPoco*.so.*
由於編譯 LibreOffice Online 的 POCO 需要以 libPoco*d.so 的方式命名
到 /usr/lib 輸入
for f in libPoco*.so.*; do ln -s "${f}" `echo "${f}" | sed -r 's/\.so\..+$/d.so/g'`; done
回到使用者目錄,輸入
git clone git://anongit.freedesktop.org/libreoffice/online.git --depth=1下載 LibreOffice Online 源始碼
由於 LibreOffice Online 經過多次更新,由發行版提供的 libreoffice-dev 未必夠用
使用由 LibreOffice Online 提供的 bunbled/include/LibreOfficeKit 才能順利編譯
可以複製 bunbled/include/LibreOfficeKit 到其他位置使用,例如 /opt/libreoffice
到 LibreOffice Online 目錄輸入
bash autogen.shUserLAnd 不允許自建檔案擁有執行權限,即使 chmod +x 都不能
因此調用 bash 來執行 shell script 之類檔案
輸入
bash configure --prefix=/opt/libreoffice/online --with-lo-path=/usr/lib/libreoffice --with-lokit-path=/opt/libreoffice --with-poco-includes=/usr/include/Poco --with-poco-libs=/usr/lib --enable-debug --disable-seccomp --disable-setcap由於 UserLAnd 不能設定 seccomp 及 setcap
因此設定編譯資料時使用 --disable-seccomp 及 --disable-setcap 不使用 seccomp 及 setcap
編輯 wsd/LOOLWSD.cpp 將 throw std::runtime_error("Do not run as root. Please run as lool user."); 取消
便可以讓 LOOLWSD 以 root 執行
或輸入
file="wsd/LOOLWSD.cpp" mv "${file}" "${file}.bak" cat "${file}.bak" |\ sed -r 's/(throw.+lool user.+;)/\/\/ \1/g' >"${file}"
輸入
make編譯 LibreOffice Online
編譯時間不久便會出現錯誤
由於在下使用的 Android 裝置是 32-bit 結構,但 LibreOffice Online 源始碼只支援 64-bit 結構
因此需要將源始碼改成完支援 32-bit 結構
編輯 net/WebSocketHandler.hpp ,將
out.push_back(static_cast<char>((len >> 56) & 0xff));
out.push_back(static_cast<char>((len >> 48) & 0xff));
out.push_back(static_cast<char>((len >> 40) & 0xff));
out.push_back(static_cast<char>((len >> 32) & 0xff));
或輸入
file="net/WebSocketHandler.hpp" mv "${file}" "${file}.bak" cat "${file}.bak" |\ sed -r 's/(out\.push_back\(static_cast<char>\(\(len >> (56|48|40|32)\) & 0xff\)\);)/\/\/ \1/g' >"${file}"取消
編輯 common/Protocol.hpp ,將
const size_t pos = getDelimiterPosition(message.data(), std::min(message.size(), 500UL), '\n');
改成
const size_t pos = getDelimiterPosition(message.data(), std::min((long unsigned int) message.size(), 500UL), '\n');
或輸入
file="common/Protocol.hpp" mv "${file}" "${file}.bak" cat "${file}.bak" |\ sed -r 's/(const size_t pos = getDelimiterPosition\(message\.data\(\), std::min\()(message\.size\(\).+))/\1(long unsigned int) \2/g' >"${file}"
編輯 wsd/TraceFile.hpp ,將
fprintf(stderr, "Invalid trace file with %ld records. First record: %s\n", _records.size(),
改成
fprintf(stderr, "Invalid trace file with %ld records. First record: %s\n", (long unsigned int) _records.size(),
或輸入
file="wsd/TraceFile.hpp" mv "${file}" "${file}.bak" cat "${file}.bak" |\ sed -r 's/(fprintf\(stderr, "Invalid trace file with %ld records\. First record: %s\n", )(_records\.size\(\).+)/\1(long unsigned int) \2/g' >"${file}"
編輯 test/TileQueueTests.cpp
由於 錯誤量相當多 ,一個一個改會比較麻煩,因此可以使用 Regex 方式修改
若果使用 nano 編輯
按 Ctrl \ ,進入 取代模式
再按 Meta R 或 Alt R,進入 Regex 取代模式
搜尋目標,輸入
(CPPUNIT_ASSERT_EQUAL\([0-9]+UL, )(.+)
取代目標,輸入
\1(long unsigned int) \2
若找到目標會顯示,按 A 便可以全部取代
取代所有符合的內容
或輸入
file="test/TileQueueTests.cpp" mv "${file}" "${file}.bak" cat "${file}.bak" |\ sed -r 's/(CPPUNIT_ASSERT_EQUAL\([0-9]+UL, )(.+)/\1(long unsigned int) \2/g' >"${file}"
繼續編譯時都會有相似的問題,可以用同樣方便取代
留意 編輯的檔案名稱 及 需要取代的內容 會不同
或輸入
file="test/WhiteBoxTests.cpp" mv "${file}" "${file}.bak" cat "${file}.bak" |\ sed -r 's/(CPPUNIT_ASSERT_EQUAL\([0-9]+UL, )(.+)/\1(long unsigned int) \2/g' >"${file}"
大約使用了 6小時 終於編譯完成
編輯 loolwsd.xml
將 SSL 、 seccomp 、 setcap 設定為 false
host allow 設定為 .+
輸入
make run執行 LOOLWSD
同樣,根據需要是否安裝
到
http://localhost:9980/loleaflet/dist/admin/admin.html 顯示管理頁面
到範例頁面,卻不能正常顯示文件內容,即使在電腦連至該頁面,都不能正常顯示文件內容
但在下在 VirtualBox 使用 Debian 10 32-bit 卻能正常使用,或許是在下的 Android 裝置的性能太差導致
在下相信 LibreOffice Online 能夠於 UserLAnd 運作
有機會購買性能較強的 Android 裝置會再測試
#################### 保留檔案 ####################
Linux 可以到 /host-rootfs/storage/emulatord/0 存取 Android 的資料
如果閣下保留 Filesystem 的檔案,可以將檔案複製到原本 Android可存取的空間 ,否則刪除 Filesystem 便 不能復原檔案
相反亦可以從 Android可存取的空間 傳送檔案到 Linux 的 Filesystem 或 直接存取檔案
可以使用 cp (複製) 或 mv (移動) 這些指令,將檔案傳送到 Android可存取的空間
輸入
cp 'some-file' '/host-rootfs/storage/emulatord/0/'便可以將檔案複製到 Android可存取的空間
使用 GUI 操作亦可以
以上設置大約使用了 8GB 空間
部分功能不能使用,部分套件亦不能正常運作
但若以功能及流動性來說,基本上可以當作個人電腦或伺服器一般使用,有點像 Raspberry Pi
另外若將 Android 的熒幕關閉,回應速度會很慢
但當熒幕長期開啟,某些高運算操作(例如編譯)電耗量會很高,即使接駁電源線,電量仍有機會下降
這個專案可以讓 Android 發揮更大功效
如果本身有使用 Linux ,很快便可以將 Android 裝置當作電腦使用
如果本身未使用 Linux 或嘗試接觸電腦科技知識,是一個簡單的學習渠道
在下認為 UserLAnd 還有很多發揮空間,由閣下發掘更多可能性
詳細資料可以到 https://github.com/CypherpunkArmory/UserLAnd 查看
沒有留言 :
張貼留言