求助:基于NixOS搭建含Chrome、屏幕键盘的极简Kiosk系统
方案1:Gnome单应用Kiosk(符合优先需求)
该方案利用Gnome原生单应用模式,完全通过NixOS配置实现,无需手动操作,覆盖所有需求。
系统级配置(/etc/nixos/configuration.nix)
{ config, pkgs, ... }: { # 禁用所有非必要服务 services.printing.enable = false; services.bluetooth.enable = false; services.avahi.enable = false; services.upower.enable = false; # 启用精简版Gnome,仅保留核心组件 services.xserver.enable = true; services.xserver.displayManager.gdm.enable = true; services.xserver.desktopManager.gnome.enable = true; services.xserver.desktopManager.gnome.extraGSettingsOverrides = '' # 启用Gnome单应用锁定模式 [org.gnome.desktop.lockdown] disable-log-out=true disable-switch-user=true disable-lock-screen=true [org.gnome.desktop.session] idle-delay=0 [org.gnome.shell] disable-user-extensions=true [org.gnome.shell.app-switcher] current-only=true ''; # 配置USB自动挂载权限 services.udisks2.enable = true; users.users.kiosk = { isNormalUser = true; home = "/home/kiosk"; extraGroups = [ "wheel" "disk" ]; autoLogin = { enable = true; displayManager = "gdm"; }; }; # 安装核心软件 environment.systemPackages = with pkgs; [ google-chrome onboard # 屏幕键盘 ]; # 启用home-manager管理用户配置 programs.home-manager.enable = true; users.users.kiosk.home-manager.enable = true; }
Home-manager用户配置(/home/kiosk/.config/home-manager/home.nix)
{ config, pkgs, ... }: { # 开机自动启动Chrome Kiosk模式与屏幕键盘 services.gnome.gnome-shell.extraSessionCommands = '' # 替换为你的目标页面URL ${pkgs.google-chrome}/bin/google-chrome --kiosk --no-first-run --disable-extensions "https://your-target-url.com" & ${pkgs.onboard}/bin/onboard & ''; # 配置Chrome默认下载路径到USB挂载目录 programs.google-chrome = { enable = true; settings = { # 替换为USB自动挂载的实际路径(默认是/media/kiosk/[USB卷标]) download.default_directory = "/media/kiosk/USB_STORAGE"; download.prompt_for_download = false; }; }; # 设置屏幕键盘自动触发 services.onboard = { enable = true; settings = { general.autostart = true; general.show_on_focus = true; }; }; }
方案2:Sway+Chrome精简Kiosk(极致轻量)
若追求最低资源占用,可采用Wayland下的Sway窗口管理器,资源消耗远低于Gnome,同样满足需求。
系统级配置(/etc/nixos/configuration.nix)
{ config, pkgs, ... }: { # 禁用所有非必要服务与X11 services.printing.enable = false; services.bluetooth.enable = false; services.avahi.enable = false; services.xserver.enable = false; # 启用Sway与核心软件 programs.sway.enable = true; programs.sway.extraPackages = with pkgs; [ google-chrome onboard udisks2 polkit ]; # 配置自动登录与用户权限 services.getty.autologinUser = "kiosk"; users.users.kiosk = { isNormalUser = true; home = "/home/kiosk"; extraGroups = [ "wheel" "disk" "input" ]; shell = pkgs.zsh; }; # 允许普通用户挂载USB security.polkit.extraConfig = '' polkit.addRule(function(action, subject) { if (action.id.indexOf("org.freedesktop.udisks2.") == 0 && subject.isInGroup("disk")) { return polkit.Result.YES; } }); ''; }
Sway用户配置(/home/kiosk/.config/sway/config)
# 禁用多余窗口装饰与快捷键 default_border none bindsym $mod+Shift+q exec "swaymsg exit" # 仅保留退出快捷键(可选) # 启动Chrome Kiosk模式(Wayland兼容) exec "${pkgs.google-chrome}/bin/google-chrome --kiosk --no-first-run --ozone-platform=wayland https://your-target-url.com" # 启动屏幕键盘 exec "${pkgs.onboard}/bin/onboard" # 初始化USB挂载目录 exec "mkdir -p /media/usb && chown kiosk:kiosk /media/usb"
额外说明
- USB挂载:udisks2默认会将USB设备挂载到
/media/kiosk/[USB卷标],可直接在Chrome设置中指定该路径为下载目录。 - 精简优化:可根据设备需求进一步移除冗余包,例如Gnome方案中可通过
services.xserver.desktopManager.gnome.excludePackages剔除默认预装的游戏、办公软件等。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

