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

基于Yocto+Weston的Chromium Kiosk快捷键禁用问题咨询

问题描述

我正在搭建一款基于Chromium的kiosk设备,采用Weston作为compositor,通过Bitbake构建Yocto系统。核心需求是:设备开机直接启动Chromium并打开指定站点,完全禁止用户退出该页面,但目前无法禁用F1、Ctrl+T、Ctrl+N这些快捷键,遇到的具体障碍包括:

  • 系统非X11架构,无法使用Xmodmap重新绑定按键;
  • 尝试过Keyd、Kmonad等工具,但它们依赖的uinput内核模块未在Yocto构建中安装;
  • 曾通过XKB Symbols禁用左右Ctrl键,并在weston.ini中配置,但无法禁用功能键,且在Bitbake中覆盖weston.ini和evdev文件时存在构建问题。

现咨询以下问题:

  1. 是否可手动安装uinput内核模块?若可以,如何操作?
  2. 功能键无法像其他按键一样通过XKB重新绑定的原因是什么?
  3. 还有哪些禁用按键或快捷键的方案?或是否需对kiosk做更全面调整以实现单Web应用锁定目标?

解答

1. 手动安装uinput内核模块的方法

可以安装,分两种场景操作:

  • 编译内核时启用uinput(永久生效):
    在Yocto的内核配置中添加CONFIG_INPUT_UINPUT=m(模块方式)或CONFIG_INPUT_UINPUT=y(内置到内核)。如果使用自定义内核层,直接修改对应defconfig文件;如果用Yocto官方内核recipe,可通过KERNEL_CONFIG_FRAGMENTS添加配置片段:
    1. 创建uinput.cfg文件,内容为CONFIG_INPUT_UINPUT=m;
    2. 在内核recipe的bbappend文件中添加:
      KERNEL_CONFIG_FRAGMENTS += "${WORKDIR}/uinput.cfg"
      
    重新构建内核和系统镜像即可。
  • 临时加载模块(测试用):
    若已有编译好的uinput.ko,用insmod uinput.ko加载;系统支持modprobe的话,直接执行modprobe uinput。要实现开机自动加载,需在/etc/modules-load.d/uinput.conf中写入uinput。

2. 功能键无法通过XKB重新绑定的原因

XKB在Wayland(Weston属于Wayland compositor)环境下的作用范围和逻辑与X11不同:

  • 功能键(F1-F12)属于系统级核心按键,Weston compositor会优先捕获部分功能键(比如F1关联帮助、窗口管理),这些事件不会传递给XKB处理;
  • XKB在Wayland中仅负责常规字符按键的映射,对于compositor层面的快捷键,XKB没有拦截或修改权限;
  • 你之前修改的evdev文件和weston.ini配置,仅覆盖了用户空间的按键映射,但Weston自身的快捷键逻辑优先级更高,导致配置失效。

3. 其他禁用按键/快捷键方案及kiosk全面调整建议

方案一:强化Chromium kiosk模式参数

Chromium自带严格的kiosk参数,可直接禁用内部快捷键,启动时添加:

chromium-browser --kiosk --app=https://your-target-site.com --disable-keyboard-navigation --disable-dev-tools --disable-tab-switcher --disable-new-tab-page --no-default-browser-check

其中--disable-keyboard-navigation会禁用大部分快捷键,--app模式比--kiosk更偏向单应用锁定,进一步限制操作空间。

方案二:修改Weston配置或源码

  • 通过weston.ini禁用compositor级快捷键:
    在weston.ini的对应section添加配置:
    [keyboard]
    disable-shortcuts=true
    
    [core]
    binding-modifier=none
    
    若Bitbake覆盖weston.ini失败,检查bbappend文件路径是否正确(需指向${D}${sysconfdir}/weston/weston.ini),并添加:
    FILES_${PN} += "${sysconfdir}/weston/weston.ini"
    
  • 修改Weston源码拦截按键:
    若配置无法解决,可修改Weston的键盘事件处理逻辑(比如src/keyboard.c),捕获F1、Ctrl+T等按键事件后直接丢弃,不传递给应用。

方案三:内核层拦截按键

修改内核evdev驱动,添加按键过滤逻辑,当检测到目标按键时直接丢弃事件。这种方式最彻底,但需要具备内核开发能力。

全面kiosk锁定建议

除了按键禁用,还需补充以下配置:

  • 禁用虚拟终端切换:修改内核配置禁用VT切换,或在systemd的systemd-logind.service中设置NAutoVTs=0;
  • 忽略电源/重启按键:在weston.ini的[input] section添加power-button=ignore,或通过systemd-logind配置;
  • 仅启动Chromium:通过systemd service设置Chromium为唯一开机启动程序,禁用其他桌面服务;
  • 系统分区只读:将根文件系统设为只读,防止用户修改配置或安装软件。

内容的提问来源于stack exchange,提问作者Tyler Faulkner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:36:23