在我的应用程序中,我需要将latency_timer
USB 设备编辑为 1,因为它会导致通信延迟较大。编辑它需要root权限,但我想让普通用户这样做。
该latency_timer
文件是:
/sys/bus/usb-serial/devices/ttyUSB0/latency_timer
即 644/root:root。目前,我需要在每次使用 root 权限启动后编辑它。
我认为有两种解决方案,我都可以接受:
- 让普通用户有编辑的权限
latency_timer
。 - 将系统设置更改为
latency_timer
在设备插入时始终设置为 1。
我怎样才能做到1或2?
(注意:“普通用户”属于该dialout
组,因此他们对设备具有常规读/写访问权限。)
答案1
一个简单的解决方案是使用方法 1。
首先,创建一个名为 bash 脚本/sbin/fix_usb_latency.sh
:
#!/bin/bash
dev=ttyUSB0
if [ $# -ge 1 ];then
dev=$1
fi
if [ -f /sys/bus/usb-serial/devices/$dev/latency_timer ] && [ `cat /sys/bus/usb-serial/devices/$dev/latency_timer` -gt 1 ];then
echo "Fixing the latency issue of $dev..."
echo 1 | sudo tee /sys/bus/usb-serial/devices/$dev/latency_timer
fi
然后,进行编辑/etc/sudoer
以让用户或组/sbin/fix_usb_latency.sh
在没有 root 权限的情况下执行。
$ sudo visudo
授予用户 akihikoy 权限:
akihikoy ALL=PASSWD: ALL, NOPASSWD: /sbin/fix_usb_latency.sh
授予组 dialout 权限(%
表示组):
%dialout ALL=PASSWD: ALL, NOPASSWD: /sbin/fix_usb_latency.sh
那么执行这个脚本就不需要密码了。
$ sudo /sbin/fix_usb_latency.sh ttyUSB0