Usb

如何在沒有root權限的情況下編輯latency_timer?

  • April 24, 2021

在我的應用程序中,我需要將latency_timerUSB 設備編輯為 1,因為它會導致通信延遲很大。編輯它需要root權限,但我想讓普通使用者這樣做。

latency_timer文件是:

/sys/bus/usb-serial/devices/ttyUSB0/latency_timer

即 644/root:root。目前,我需要在每次啟動後使用 root 權限對其進行編輯。

我認為會有兩種解決方案,我都可以接受:

  1. 讓普通使用者有編輯權限latency_timer
  2. 將系統設置更改為latency_timer在插入設備時始終設置為 1。

我該怎麼做1或2?

(注意:“普通使用者”屬於該dialout組,因此他們具有對設備的正常讀/寫訪問權限。)

一個簡單的解決方案是使用方法 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 ALL=PASSWD: ALL, NOPASSWD: /sbin/fix_usb_latency.sh

那麼這個腳本的執行不需要密碼。

$ sudo /sbin/fix_usb_latency.sh ttyUSB0

引用自:https://unix.stackexchange.com/questions/645744