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

article/2025/7/13 2:23:33

前言

故事回到 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.hkcw.cn/article/ScHDsYHaUO.shtml

相关文章

《汇编语言》第13章 int指令——实验13 编写、应用中断例程

(1)编写并安装 int 7ch 中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处。 参数:(dh)行号,(dl)列号,(cl&a…

大模型前处理-CPU

前处理包含哪些流程 分词 tokenizationembedding CPU可以做哪些优化 分词 分词在做什么? 什么是词元化? 词元化(Tokenization)是把一段自然语言文本拆分成更小的单元(称为“词元”,即 Token&#xff0…

设备驱动与文件系统:02 键盘

操作系统中键盘驱动的讲解 在这一讲中,我将为大家讲解键盘相关内容。从上一讲开始,我们进入了操作系统第四个部分的学习,也就是操作系统对设备的驱动与管理。 上一讲我们探讨的是显示器,并且提到,一个终端设备是由显示…

工作流引擎-18-开源审批流项目之 plumdo-work 工作流,表单,报表结合的多模块系统

工作流引擎系列 工作流引擎-00-流程引擎概览 工作流引擎-01-Activiti 是领先的轻量级、以 Java 为中心的开源 BPMN 引擎,支持现实世界的流程自动化需求 工作流引擎-02-BPM OA ERP 区别和联系 工作流引擎-03-聊一聊流程引擎 工作流引擎-04-流程引擎 activiti 优…

Windows环境下Scoop包管理工具的全面指南

🧩 一、Scoop核心特性与设计理念 定位与优势 专注于开源命令行工具和便携式(Portable)应用,无需管理员权限即可安装,减少系统污染。自动管理环境变量(通过shims目录),安装后即时可用…

谷粒商城-分布式微服务项目-高级篇[三]

十五、商城业务-支付 15.1 支付宝支付 15.1.1 进入“蚂蚁金服开放平台” 支付宝开放 平台地址: 支付宝开放平台 15.1.2 下载支付宝官方 demo,进行配置和测试 开发者文档:支付宝开放平台文档中心 电脑网站支付文档:小程序文…

EchoMimicV2:迈向引人注目、简化的半身人类动画

今天介绍EchoMimicV2,EchoMimicV2是阿里蚂蚁集团推出的半身人体AI数字人项目,输入参考图片、音频、和手部姿势序列生成动画视频(对图片的规范要求比较高,图片规范的话效果还可以),感兴趣的还可以去了解一下…

SpringBoot手动实现流式输出方案整理以及SSE规范输出详解

背景: 最近做流式输出时,一直使用python实现的,应需求方的要求,需要通过java应用做一次封装并在java侧完成系统鉴权、模型鉴权等功能后才能真正去调用智能体应用,基于此调研java实现流式输出的几种方式,并…

vuex的使用

❀ ❀ ❀ ❀ ❀ ❀ ❀ vuex的官网 ❀ ❀ ❀ ❀ ❀ ❀ ❀ ❀ 这里用法不纯粹。用户toolbar页面切换时的传参。若后期有更好的方式,会更改。因vuex用于全局,在这个场景下使用有点大材小用了 其中需要注意的点就是更新、获取状态 更新状态。updateProjec…

Calendar和Datepicker

Displaystart Displayend "2024-10-8" selectedDate属性 设定选择的日期 在 C# 中,DateTime? date1 表示 **一个可空的 DateTime 类型变量**。 ?.是不为零 ?是可以为零0️⃣ 多选 selectionmode none不让选 singlerange shift …

赛事获奖|TsingtaoAI荣获“雄才杯”2025创新创业大赛总决赛奖项

5月16-18日,由雄安新区党工委人才工作领导小组办公室主办的“雄才杯”2025创新创业大赛总决赛在雄安新区成功举办。TsingtaoAI凭借“基于DeepSeek的具身智能实训”项目荣获优胜奖,本项目为参赛项目中唯一的教育科技服务类获奖项目。 大赛背景 本次总决…

初识vue3(vue简介,环境配置,setup语法糖)

一,前言 今天学习vue3 二,vue简介及如何创建vue工程 Vue 3 简介 Vue.js(读音 /vjuː/,类似 “view”)是一款流行的渐进式 JavaScript 框架,用于构建用户界面。Vue 3 是其第三代主要版本,于 …

C++面向对象(二)

面向对象基础内容参考: C面向对象(一)-CSDN博客 友元函数 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定…

基于AIS的海洋观测应用

知识星球:数据书局。打算通过知识星球将这些年积累的知识、经验分享出来,让各位在数据治理、数据分析的路上少走弯路,另外星球也方便动态更新最近的资料,提供各位一起讨论数据的小圈子 1.背景 船舶自动识别系统(Aut…

imx6ull(0):烧录、启动

参考内容: i.MX6ULL Applications Processors for Industrial Products i.MX6ULLApplicationsProcessorReferenceManual 正点原子 I.MX6U嵌入式Linux驱动开发指南 以及 广大工程师们在互联网上分享的学习笔记(一样东西学的人多的时候所带来的优势) 例如这里我用…

CloudCompare——使用CSF算法进行点云高程归一化

目录 1.算法原理2.软件操作2.1 CSF算法2.2 生成CSF网格2.3 平滑网格(可选)2.4 计算点云到网格的距离2.5 将计算得到的距离赋值给高程 3.结果展示3.1 原始点云3.2 归一化结果 1.算法原理 点云高程归一化的关键在于获取原始点云地面数据的DEM。可选取CSF算法提取样地点云地面DEM。…

【C语言】C语言经典小游戏:贪吃蛇(下)

文章目录 一、游戏前准备二、游戏开始1、游戏开始函数(GameStart)1)打印欢迎界⾯(WelcomeToGame)2)创建地图(CreateMap)3)初始化蛇⾝(InitSnake)4…

循序渐进 Android Binder(一):IPC 基本概念和 AIDL 跨进程通信的简单实例

Binder 给人的第一印象是”捆绑者“,即将两个需要建立关系的事物用某些工具束缚在一起。在 Android 中,Binder 是一种高效的跨进程通信(IPC)机制,它将可以将运行在不同进程中的组件进行绑定,以实现彼此通信…

ISBN书号查询接口如何用PHP实现调用?

一、什么是ISBN书号查询接口 ISBN数据查询接口是一项图书信息查询服务。它基于全球通用的ISBN编码系统,帮助用户快速获取图书的详细信息,包括书名、作者、出版社、出版时间、价格、封面等关键字段。 该接口广泛应用于电商平台、图书馆管理系统、二手书…

Linux(信号)

目录 一 什么是信号 二 Linux中的信号 1. 查看信号:kill -l 2. 自定义信号的处理方式 2.1 API 2.2 demo 3. 理解信号的发送 4. 信号产生的方式 三 信号保存 四 捕捉信号 1. 先来说说硬件中断: 1. 谁调度操作系统? 2. 理解时间片…