devsfs规则

devsfs规则

我有一个在监狱中运行的带有 xorg-x11 的整个系统。我唯一的问题是,当 X 运行时,我无法添加或删除键盘或鼠标。如果我重新启动 X,新连接的键盘或鼠标就可以正常工作。我不想重新启动 X。如果我在裸机上运行我的系统,它会按预期工作。只有当我从监狱运行它时才会发生这种情况。

我看到这些设备是在我插入或拔出它们时创建的:

/dev/input/event*
/dev/usb/*
/dev/ukbd*
/dev/kbd*
/dev/ums*
/dev/ugen*

我正在运行 dbus,但无论出于何种原因,Xorg 似乎都没有看到它们。

如果我跟踪 /var/log/Xorg.0.log,则在插入或拔出键盘或鼠标时,我看不到任何指示添加或删除键盘或鼠标的消息。

编辑#1:

我对这个监狱的 devfs 规则是:

add path 'dri*' unhide
add path 'drm*' unhide
add path 'dsp*' unhide
add path 'mixer*' unhide

add path 'speaker*' mode 0660 group operator unhide

# USB drives
add path 'da*' unhide

编辑#1:回答答案中的问题:

  1. 我的 devfs 规则与监狱 devfs 规则 ID 匹配。
  2. 当我拔下并回复键盘和鼠标时,Xorg.0.log 没有显示任何事件。相反,主机系统显示键盘和鼠标被拔出并重新插入。
  3. 主机系统是最小安装,它有管理包和视频驱动程序,仅此而已。它没有完整的 Xorg 安装。

编辑#2:

  1. 我安装了 inputplug 并运行: DISPLAY=:0 inputplug -d --debug -c echo ,当我插入键盘并拔下它时,它没有打印任何输出。
  2. 同样,基础/主机系统上的 dmesg 显示键盘正在插入和拔出。
  3. 监狱显示 /dev/ukbd1 下的设备与主机匹配。
  4. 监狱显示还显示了 /dev/input/event7 下新添加的设备。
  5. xinput 列表前后没有显示出任何差异。

嗯,我无法在监狱中以 root 身份在 /dev 中创建任何文件。这是一个延伸,但监狱本身没有权限创建它需要的任何设备节点,而是依赖主机来创建它们吗?

答案1

devsfs规则

我首先怀疑的是devfs规则已设置。

您可以使用以下方法检查您的监狱设置了哪些规则:

# jls -j <jailname> -n devfs_ruleset
devfs_ruleset=0

您可以在 中查看默认规则/etc/defaults/devfs.rules并在 中设置您自己的规则/etc/devfs.rules

在监狱中启用音频的典型示例是:

# /etc/devfs.rules

[devfsrules_my_fine_x_jail=42]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add path 'mixer*' unhide
add path 'dsp*' unhide

请记住service devfs restart,如果您违反规则。请注意,您不应堆叠/嵌套你的规则集,但要像上面那样明确。

然后在监狱配置中设置规则集:

# /etc/jail.conf

myjail {
    devfs_ruleset = 42;
}

在这种情况下,它们可能足够好(TM),特别是如果它在 X 重新启动后工作。然而值得一提的是,因为据称这些设备是在 中看到的/dev。没有说明的是这是否在监狱内或主机上得到验证。此外,我们没有看到连接 kbd/鼠标时实际添加的内容的差异。

X配置

假设主机和监狱中使用完全相同的 X 设置。但没有提及它是如何设置的。如今,X 非常擅长自动检测一切。再次假设我们使用的是最新的 FreeBSD 14 和新的 X。

配置 X 的现代方法不是拥有一个大的 xorg.conf,而是仅在我们真正需要时添加部分。如果我们有一个/usr/local/etc/X11/xorg.conf.d/input.conf设置,如果有的话,选择什么设备路径和驱动程序,那就很有趣了。部分原因是为了确保我们不会做一些奇怪的事情,例如禁用自动添加设备

在这种情况下,我假设没有设置。但是,如果重新启动 X 时它可以工作,那么查看/var/log/Xorg.0.log以确定实际拾取的鼠标/键盘设备路径和驱动程序是很有趣的。如果在主机上启动,我们使用的是否与在监狱中相同。主机上触发了哪些未在监狱中拾取的事件?这将帮助我们缩小寻找范围。

开发怪癖

从前面我们不知道实际使用的是什么设备。也许设备运行良好,但这是一个配置问题evdev。我们是否使用一个乌德夫翻译层?也许翻译层在监狱内有一个边缘问题,就像 Linux chroot 环境一样在这里看到需要绑定挂载 udev 的地方。

最后一招

如果无法使用 Xorg 进行良好的自动检测,我们仍然可以选择避免完全重新启动 X 服务器。X输入可以作为命令运行。究竟需要什么咒语取决于所使用的设备。也许简单的--enable设备名称就足够了。如果这种情况很少发生,则只需切换 VT(如果可能)并执行jexec xinput.

devd或者,如果值得的话,全力以赴,编写一个 hacky脚本。哈基,是的。最后的手段,是的。看如何在 FreeBSD 上配置 devd 以在连接 USB 键盘时运行程序?

相关内容