如何以编程方式向用户提供对 /sys/class/backlight/acpi_video0/brightness 的访问(udev?)

如何以编程方式向用户提供对 /sys/class/backlight/acpi_video0/brightness 的访问(udev?)

/sys/class/backlight/acpi_video0/brightness我通过一个脚本(通过)控制背光sudo,该脚本提供了一个简单的脚本来递增/递减、设置、检索和恢复桌面启动时的最后一个背光设置。xrandr不是一个选项,因为 Nvidia 接口是通过 sysfs 设备实现的。

我编写了一个简单的 Qt 界面,它提供了一个滑块和旋转框来完成同样的事情,但我坚持如何向程序提供提升的权限,以使用户能够修改设置,而无需求助于susudo通过某些execv界面system

这不是重复的以用户身份控制背光(无 xbacklight)。 (这就是我已经对脚本所做的事情)

这个问题更多的是一个程序设计方法问题(对于SO来说有点笼统)。我不明白的是是否更好:

  1. 编写一条 udev 规则来更改权限,允许用户更改亮度,然后再编写第二条规则来恢复原始权限? (但是如何从程序内部触发规则呢?)
  2. 编写一个 udev 规则来更改用户对整个桌面会话的权限(可接受 - 不是首选,但如何在用户登录时而不是在启动时触发规则?)
  3. 在代码中使用我尚未偶然发现的其他权限提升?

似乎应该有一个直接且通用的解决方案,但是在完成 udev 文档之后,更改和恢复 sysfs 文件的权限(或所有者或组)的规则是直接的,但是如何触发在程序启动时更改,然后在退出时恢复原始权限。

我的偏好是处理程序内的更改,以便 sysfs 设备不会更改,除非在写入之前立即进行更改/sys/class/backlight/acpi_video0/brightness,然后立即恢复。

我不是 udev 大师,我基本上阅读了手册页,以及 1/2 打教程和维基百科页面。在这样做时,我还没有遇到过从 C/C++ 触发规则的编程方式(或者当我看到它时我没有认出它)。因此,我不确定 udev 是否​​会提供解决方案,但从文件权限的角度来看,这似乎是一个比寻找安全方法来提升程序本身权限更好的研究领域。

那么,udev 到底有没有?如果是这样,在代码中触发 - 如何?或者,满足于更改整个桌面会话的 sysfs 文件的权限? -- 但那么如何在桌面启动而不是启动时触发呢?

如果不是 udev,那么有什么安全方法可以实现临时权限提升以允许直接写入 sysfs 文件?

最糟糕的情况是,我可以使用execvorsystem简单地调用脚本并让其sudo处理它,但我正在寻找一种更优雅的方法来为所有用户处理它,而不必为每个用户进行配置并使每个用户成为或组/etc/sudoers的成员。wheelsudo

相关内容