当前位置: 首页 > news >正文

基于 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 桌面环境的配置文件
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 操作.

在这里插入图片描述

http://www.lqws.cn/news/68275.html

相关文章:

  • FPGA仿真中阻塞赋值(=)和非阻塞赋值(<=)区别
  • 线性代数复习
  • ios tableview吸顶
  • 线段树刷题记录
  • OpenCV——Mac系统搭建OpenCV的Java环境
  • 详解鸿蒙仓颉开发语言中的计时器
  • C++面向对象编程:类与对象详解
  • 【AI智能体】Spring AI MCP 从使用到操作实战详解
  • Caliper压力测试
  • 使用new操作符动态分配
  • 有公网ip但外网访问不到怎么办?内网IP端口映射公网连接常见问题和原因
  • JDK21深度解密 Day 11:云原生环境中的JDK21应用
  • JVM——从JIT到AOT:JVM编译器的云原生演进之路
  • 常见算法题目5 -常见的排序算法
  • LabVIEW准分子激光器智能控制系统
  • 【Pytorch学习笔记】模型模块07——hook实现Grad-CAM
  • 数据库系统概论(十四)详细讲解SQL中空值的处理
  • Spring框架学习day6--事务管理
  • 《人性的弱点》能带给我们什么?
  • IoTGateway项目生成Api并通过swagger和Postman调用
  • [免费]微信小程序网上花店系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
  • 提升嵌入式软件调试效率的核心方
  • 内存管理--《Hello C++ Wrold!》(8)--(C/C++)--深入剖析new和delete的使用和底层实现
  • 【Linux】网络--网络层--IP协议
  • PyTorch——卷积层(3)
  • CppCon 2014 学习:0xBADC0DE
  • CSS之动画(奔跑的熊、两面反转盒子、3D导航栏、旋转木马)
  • 小目标检测:YOLOV7改进之双坐标注意力(DCA)
  • TDengine 高级功能——读缓存
  • 汽车安全体系:FuSa、SOTIF、Cybersecurity 从理论到实战