You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 05:04:59