前言
故事回到 7 年前, 在網上沖浪的時候發現了一篇介紹使用 Ubuntu 打造 kiosk 單功能用途電腦的文章, 挺好玩的, 就翻譯了一下并比葫蘆畫瓢先后用了 CentOS 7, ArchLinux 進行了實現. 歷史文章:
翻譯 - 使用Ubutnu14.04和Chrome打造單功能用途電腦(大屏展示電腦)
使用CentOS 7+lightdm+Openbox+Chromium打造單功能用途電腦(大屏展示電腦)
ArchLinux+lightdm+Openbox+Chromium定制單功能用途電腦
再來介紹一下什么是 kiosk, 直接看下圖, 保證你在許多公共場合見到過類似這樣的一體機, 當然人家還會集成攝像頭掃碼, NFC 刷卡等外設.
至于這些設備使用的底層的操作系統, 基本上都是 Windows 或者 Android. 之前使用 CentOS, ArchLinux 實現的過程其實都還比較繁瑣, 也比較重. 接下來就是本次挑戰所用到的主角 Alpine Linux 登場了. 它本來用的比較多的場景就是在 Docker 里面作為基礎鏡像, 因為足夠輕量. 官網下載的最新版本系統 IOS 鏡像文件僅有 200 多 MB, 對于硬件資源的要求也更不用說有多低門檻了. 好了, 下面直接進入主題.
創建虛擬機
-
首先從清華鏡像站下載 Alpine Linux 最新版本的 ISO 鏡像文件:
https://mirrors.tuna.tsinghua.edu.cn/alpine/latest-stable/releases/x86_64/alpine-standard-3.22.0-x86_64.iso -
在 VirtualBox 中創建一臺虛擬機, 選擇下載好的 ISO 鏡像文件.
內存隨便給個 2G, CPU *2
硬盤 8G 就夠了
-
創建好虛擬機后, 我們再打開它的 Settings, 改一下網絡模式用
Bridged Adapter
并選中我們物理機的本地網卡. 這樣可以將虛擬機直接對接到和物理機相同的網絡環境中, 方便我們后續通過 SSH 遠程連接訪問.
安裝 Alpine 系統
- 啟動虛擬機后, 會自動從 ISO 引導到命令行界面, 用 root 用戶登錄(沒有密碼)
- 運行
setup-alpine
啟動安裝程序, 使用下面回復:
- Keymap:
none
- Hostname:
自己寫
- Interface:
eth0
- Manual network:
n
- New root password:
自己寫
- Timezone:
Asia/Shanghai
- Proxy:
none
- NTP client:
busybox
- APK Mirror:
14
清華源 - Setup a user:
自己寫
注意這里需要單獨創建一個新的普通用戶, 給后面瀏覽器運行的時候用 - ssh server:
openssh
- Disk to use:
sda
- Use it:
sys
注意這個需要指定安裝方式使用 sys 即當成安裝到本地磁盤的系統 - Erase and continue:
y
完整安裝步驟響應截圖:
- 安裝完畢后, 將 ISO 從虛擬機中移除, 然后執行
reboot
重啟即可進入本地磁盤中的系統.
配置 kiosk
- 從本地啟動的系統使用普通用戶
lpwm
和密碼登錄后, 先運行ip a
檢查當前 IP 地址
- 接下來我們就可以在物理機上通過 SSH 使用安裝過程中新創建的普通用戶
lpwm
進行遠程登錄, 這樣可以方便我們復制粘貼命令
- 先在當前登錄的普通用戶狀態下創建 X 桌面環境的配置文件
echo -e "#!/bin/sh\nopenbox-session &\nfirefox -kiosk https://www.bing.com" > ~/.xinitrc && chmod +x ~/.xinitrc
展開解釋一下配置文件中執行的兩條命令:
openbox-session &
在后臺運行 openbox 會話進程, 用于提供基礎的桌面環境支持.
firefox -kiosk https://www.bing.com
以 kiosk 模式啟動 Firefox 并訪問 Bing. 該模式下鼠標右鍵不可用. 相關介紹: Firefox for Enterprise Kiosk mode
- 切換到 root 用戶后安裝桌面環境所需的最少依賴環境
susetup-xorg-base && apk add openbox font-noto-cjk firefox
注:
setup-xorg-base
是 Alpine Linux 中的一個腳本,用于安裝 X Window System(Xorg)的基礎組件。它提供了一個簡單的安裝方式,適用于需要圖形界面的環境。
openbox
是一款輕量級、高度可定制的開源窗口管理器,適用于 Linux 和其他類 Unix 系統。
font-noto-cjk
是一個開源的字體家族,由 Google 的 Noto 字體項目開發,專門設計用于覆蓋中文(簡體與繁體)、日文和韓文(CJK)的字符。
firefox
不用說了吧
- [可選] 為 Firefox 創建策略配置, 禁止用戶訪問開發者工具(F12)
echo '{"policies": {"DisableDeveloperTools": true}}' | tee /usr/lib/firefox/distribution/policies.json
- 再返回 Virtualbox 的虛擬機中, 運行
startx
啟動桌面環境, 直接打開了 kiosk 模式下的 Firefox 并訪問了指定的 URL.
配置開機自動登錄
至此, 我們已經實現了主要的功能, 但是系統每次啟動后還需要手動登錄用戶并且運行 startx
才可以進入全屏的 kiosk 界面. 下面繼續修改 Alpine 配置實現開機自動以 lpwm
用戶登錄并啟動 xorg (startx
)
# 注意以 root 身份下執行# 添加 agetty 包
apk add agetty# 編輯配置文件
vi /etc/inittab
將 tty1
開頭的行注釋掉, 插入下面內容:
tty1::respawn:/sbin/agetty --autologin lpwm --noclear tty1 linux
參考文檔: TTY Autologin
繼續為普通用戶創建登錄自動運行的腳本
su - lpwm
vi ~/.profile
粘貼下面內容保存退出:
if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; thenstartx
fi
reboot
重啟
最終效果
后記
相較于之前使用 CentOS/ArchLinux 作為基礎系統的方式, Alpine Linux 在完全配置后的磁盤占用空間僅有 1.1GB, 可以說是相當迷你了:
經過測試, 在 kiosk 模式下的 Firefox 中還可以正常播放視頻以及聲音, 完美~
如果需要臨時切換到命令行中進行系統調試, 還可以通過快捷鍵 Ctrl + Alt + F2
切換到 tty2
會話 (最多到 F6, inittab
中預先定義的) 進行 CLI 操作.