基于 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.pswp.cn/web/82549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习及深度学习】机器学习模型的误差:偏差、方差及噪声

机器学习模型的误差分析 V1.0机器学习模型的衡量准则概念引入机器学习模型误差分析误差出现的原因及消除 V1.0 机器学习模型的衡量准则 衡量机器学习模型的好坏可以考虑以下几个方面: 偏差(Bias): 在充分训练的情况下&#xff0…

混沌映射(Chaotic Map)

一.定义 混沌映射是指一类具有混沌行为的离散时间非线性动力系统,通常由递推公式定义。其数学形式为 ,其中 f 是非线性函数,θ 为参数。它们以简单的数学规则生成复杂的、看似随机的轨迹,是非线性动力学和混沌理论的重要研究对象…

多群组部署

相关概念 星形拓扑和并行多组 如下图,星形组网拓扑和并行多组组网拓扑是区块链应用中使用较广泛的两种组网方式。 星形拓扑:中心机构节点同时属于多个群组,运行多家机构应用,其他每家机构属于不同群组,运行各自应用…

基于vue3-elemenyui的动态列案例

本案例主要是实现数据模型的解析以及实现el-table的动态列加载。 1.数据结构 公司A\B\C\测试1,是列,功能-url,是行数据,其中功能x是行头。 this.rawData [{companyName: "公司A",rpWebShows: [{ "功能1": &…

Kerberos面试内容整理-Kerberos 与 LDAP/Active Directory 的集成

Kerberos 通常不会单独存在于企业环境中,而是与目录服务相结合以提供完整的身份管理方案。其中,Active Directory (AD) 是 Kerberos 集成应用的典型代表。Active Directory 是微软的目录服务,实现了 LDAP(轻量级目录访问协议)目录和 Kerberos 认证的融合。在 AD 域控制器上…

Oracle DG库控制文件IO错误导致宕机的应急处理

Oracle DG库控制文件IO错误导致宕机的应急处理 事故现场偷天换日棋差一招事故现场 一套Oracle 19c DG环境的备库宕机。 根据告警时间检查实例宕机时间点附近的alert日志有如下重要信息: 2025-05-25T23:34:10.705385+08:00 KCF: read, write or open error, block=0x3377ee …

《前端面试题:前端盒模型》

前端盒模型完全指南:从原理到面试实战 🎁 端午快乐! 各位前端小伙伴,端午节快乐!🥮 在这个粽叶飘香的时节,愿你的代码如龙舟般一往无前,bug 如咸蛋黄般被完美包裹!今天我…

BERT:让AI真正“读懂”语言的革命

BERT:让AI真正“读懂”语言的革命 ——图解谷歌神作《BERT: Pre-training of Deep Bidirectional Transformers》 2018年,谷歌AI团队扔出一篇核弹级论文,引爆了整个NLP领域。这个叫BERT的模型在11项任务中屠榜,甚至超越人类表现…

爬虫入门:从基础到实战全攻略

🧠 一、爬虫基础概念 1.1 爬虫定义 爬虫(Web Crawler)是模拟浏览器行为,自动向服务器发送请求并获取响应数据的一种程序。主要用于从网页中提取结构化数据,供后续分析、展示或存储使用。 1.2 爬虫特点 数据碎片化&…

uni-app学习笔记二十一--pages.json中tabBar设置底部菜单项和图标

如果应用是一个多 tab 应用,可以通过 tabBar 配置项指定一级导航栏,以及 tab 切换时显示的对应页。 在 pages.json 中提供 tabBar 配置,不仅仅是为了方便快速开发导航,更重要的是在App和小程序端提升性能。在这两个平台&#xff…

行业分析---小米汽车2025第一季度财报

1 背景 最近几年是新能源汽车的淘汰赛,前短时间比亚迪再次开始了降价,导致一片上市车企的股价大跌,足见车圈现在的敏感度。因此笔者会一直跟踪新势力车企的财报状况,对之前财报分析感兴趣的读者朋友可以参考以下博客:…

Python 解释器安装全攻略(适用于 Linux / Windows / macOS)

目录 一、Windows安装Python解释器1.1 下载并安装Python解释1.2 测试安装是否成功1.3 设置pip的国内镜像------永久配置 二、macOS安装Python解释器三、Linux下安装Python解释器3.1 Rocky8.10/Rocky9.5安装Python解释器3.2 Ubuntu2204/Ubuntu2404安装Python解释器3.3 设置pip的…

考研系列—操作系统:冲刺笔记(1-3章)

目录 第一章 计算机系统概述 1.基本概念 2.内核态和用户态 3.中断(外中断)、异常(内中断-与当前执行的) 4.系统调用 5.操作系统引导程序 2021年真题: 6.操作系统结构 大纲新增 (1)分层结构 (2)模块化 (3)外核 7.虚拟机 第二章 进程管理 1.画作业运行的顺序和甘…

监控 100 台服务器磁盘内存CPU利用率

监控 100 台服务器磁盘,内存,CPU利用率脚本 以下是一个优化后的监控脚本,用于同时监控100台服务器的磁盘、内存和CPU利用率,并支持并发执行以提高效率: #!/bin/bash # 服务器监控脚本 - 支持并发获取100台服务器系统指标 # 功能…

[5-02-04].第01节:Jmeter环境搭建:

JMeter笔记大纲 Jmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK,并且配置了环境变量 一、JMeter概述: 1.1.JMeter是什么: JMeter是Appache组织使用java开发的一款测试工具 可以用于对服务器、网络或对象模拟巨大的负载…

【兽医处方专用软件】佳易王兽医电子处方软件:高效智能的宠物诊疗管理方案

一、软件概述与核心优势 (一)试用版获取方式 资源下载路径:进入博主头像主页第一篇文章末尾,点击卡片按钮;或访问左上角博客主页,通过右侧按钮获取详细资料。 说明:下载文件为压缩包&#xff…

MapReduce(期末速成版)

起初在B站看3分钟的速成视频,感觉很多细节没听懂。 具体例子解析(文件内容去重) 对于两个输入文件,即文件A 和文件B,请编写MapReduce 程序,对两个文件进行合并,并剔除 其中重复的内容,得到一个新的输出文件…

Java高级 | 【实验四】Springboot 获取前端数据与返回Json数据

隶属文章: Java高级 | (二十二)Java常用类库-CSDN博客 系列文章: Java高级 | 【实验一】Spring Boot安装及测试 最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot …

从零打造AI面试系统全栈开发

🤖 AI面试系统开发完整教程 📋 项目概述 本教程将带你从零开始构建一个完整的AI面试系统,包含前端、后端、AI集成和部署的全流程。 源码地址 技术栈 前端: React TypeScript Vite Vaadin Components后端: Spring Boot Spring Securi…

【硬件】PCIe协议 | 电脑的高速公路

文章目录 PCIe | 外围设备高速互联通道(peripheral component interconnect express)的核心概念和应用 基础概念 1.1 电脑内的”高速“,连接CPU、显卡、SSD(固态硬盘)等核心组件;数据传输速度极快&#xff…