基于 Alpine 定制单功能用途(kiosk)电脑

前言

故事回到 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 启动安装程序, 使用下面回复:
  1. Keymap: none
  2. Hostname: 自己写
  3. Interface: eth0
  4. Manual network: n
  5. New root password: 自己写
  6. Timezone: Asia/Shanghai
  7. Proxy: none
  8. NTP client: busybox
  9. APK Mirror: 14 清华源
  10. Setup a user: 自己写 注意这里需要单独创建一个新的普通用户, 给后面浏览器运行的时候用
  11. ssh server: openssh
  12. Disk to use: sda
  13. Use it: sys 注意这个需要指定安装方式使用 sys 即当成安装到本地磁盘的系统
  14. Erase and continue: y

完整安装步骤响应截图:




  • 安装完毕后, 将 ISO 从虚拟机中移除, 然后执行 reboot 重启即可进入本地磁盘中的系统.

配置 kiosk

  • 从本地启动的系统使用普通用户 lpwm 和密码登录后, 先运行 ip a 检查当前 IP 地址
  • 接下来我们就可以在物理机上通过 SSH 使用安装过程中新创建的普通用户 lpwm 进行远程登录, 这样可以方便我们复制粘贴命令
  • 先在当前登录的普通用户状态下创建 X 桌面环境的配置文件
bash 复制代码
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 用户后安装桌面环境所需的最少依赖环境
bash 复制代码
su

setup-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.  
  ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0198b71d145b44b8869502a61887f8c3.gif)

## 配置开机自动登录

至此, 我们已经实现了主要的功能, 但是系统每次启动后还需要手动登录用户并且运行 `startx` 才可以进入全屏的 kiosk 界面. 下面继续修改 Alpine 配置实现开机自动以 `lpwm` 用户登录并启动 xorg (`startx`)

```bash
# 注意以 root 身份下执行

# 添加 agetty 包
apk add agetty

# 编辑配置文件
vi /etc/inittab

tty1 开头的行注释掉, 插入下面内容:

shell 复制代码
tty1::respawn:/sbin/agetty --autologin lpwm --noclear tty1 linux

参考文档: TTY Autologin

继续为普通用户创建登录自动运行的脚本

bash 复制代码
su - lpwm
vi ~/.profile

粘贴下面内容保存退出:

shell 复制代码
if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then
  startx
fi

reboot 重启

最终效果

后记

相较于之前使用 CentOS/ArchLinux 作为基础系统的方式, Alpine Linux 在完全配置后的磁盘占用空间仅有 1.1GB, 可以说是相当迷你了:

经过测试, 在 kiosk 模式下的 Firefox 中还可以正常播放视频以及声音, 完美~

如果需要临时切换到命令行中进行系统调试, 还可以通过快捷键 Ctrl + Alt + F2 切换到 tty2 会话 (最多到 F6, inittab 中预先定义的) 进行 CLI 操作.

相关推荐
cui_win30 分钟前
【内存】Linux 内核优化实战 - net.ipv4.tcp_tw_reuse
linux·网络·tcp/ip
CodeWithMe4 小时前
【Note】《深入理解Linux内核》 Chapter 15 :深入理解 Linux 页缓存
linux·spring·缓存
0wioiw04 小时前
Ubuntu基础(监控重启和查找程序)
linux·服务器·ubuntu
Tipriest_4 小时前
Ubuntu常用的软件格式deb, rpm, dmg, AppImage等打包及使用方法
linux·运维·ubuntu
胡斌附体5 小时前
linux测试端口是否可被外部访问
linux·运维·服务器·python·测试·端口测试·临时服务器
愚润求学5 小时前
【Linux】自旋锁和读写锁
linux·运维
大锦终5 小时前
【Linux】常用基本指令
linux·运维·服务器·centos
IT项目管理5 小时前
达梦数据库DMHS介绍及安装部署
linux·数据库
知北游天5 小时前
Linux:多线程---深入互斥&&浅谈同步
linux·运维·服务器
Gappsong8745 小时前
【Linux学习】Linux安装并配置Redis
java·linux·运维·网络安全