Apparmor 将拒绝 sc-controller 的 snap 或 appimage 访问 uinput,导致 sc-controller 显示错误 1。20.04 的 deb 不可用,并且源需要 python 2.7。
从/var/log/kern.log
audit: type=1400 audit(1588199484.212:67): apparmor="DENIED" operation="open" profile="snap.sc-controller.sc-controller" name="/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5/busnum" pid=2067 comm="python2" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
答案1
来源:访问 dev uinput 的最佳方式在 snapcraft.io 论坛上。感谢 jdstrand 和 mcphail sc-controller 的开发人员。sc-controller 目前正在更新到 python3,但在该工作完成之前,使用 snap 是将 0.4.7 版本打包到 20.04 的合理方法。
Sc-controller 需要对设备进行相当深入的访问才能在严格限制下运行。对系统进行的以下更改可能会允许 rouge snap 注入按键和鼠标事件继续风险自负。
- 将该行添加
/dev/uinput rw,
到snap.sc-controller.sc-controller
。我将其添加到第 30 行,位置和两个空格的缩进似乎很重要。
sudo nano /var/lib/snapd/apparmor/profiles/snap.sc-controller.sc-controller
- 将更新的 apparmor 规则加载到内核中:
sudo apparmor_parser -r /var/lib/snapd/apparmor/profiles/snap.sc-controller.sc-controller
- 如果你的系统上没有这个
/etc/udev/rules.d/70-snap.sc-controller.rules
,你现在可以测试你的 snap。如果你有,请添加:
# test
KERNEL=="uinput", TAG+="snap_sc-controller"
- 应用规则
跑步:
sudo udevadm trigger --subsystem-match=misc # make the rules apply
#snap run --shell yoursnap.cmd # launch a shell under yoursnap.cmd
- 在与 snap shell 不同的终端中运行 udevadm 并检查 TAGS 行。它现在应该包括
snap_sc-controller
udevadm info /dev/uinput
...
E: TAGS=:snap_sc-controller:uaccess:seat:
- 可能需要重新启动才能完全实施更改并允许 sc-controller snap 正常运行。