每当 Pendrive 连接到我的系统时,我都会尝试运行脚本。我遵循了这个和这个问题,它正在工作,但仍然存在一些问题。
这是我的udev规则文件:
ACTION=="add", ATTRS{idVendor}=="8564", ATTRS{idProduct}=="1000", RUN+="/usr/local/my_script.sh"
Run Code Online (Sandbox Code Playgroud)
这是我的脚本:
ACTION=="add", ATTRS{idVendor}=="8564", ATTRS{idProduct}=="1000", RUN+="/usr/local/my_script.sh"
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
每当我插入我的USB设备,执行脚本,因为文件env.out中生成/tmp,而是从USB设备中的数据不会被复制到测试目录。
如果我手动运行脚本,它工作正常!为什么?
如何使我的规则文件更通用,以便它适用于任何连接而不知道其 ID 的 USB 设备?
我的想法是在连接时自动将所有数据从任何连接的 USB 设备复制到我的计算机。
Nul*_*ter 10
回答我自己的问题:
1. 脚本没有运行,因为它需要sudo运行权限。
要解决此问题,请将此脚本sudo设为可执行:
sudoers使用以下命令编辑文件:
sudo visudo
Run Code Online (Sandbox Code Playgroud)
在第 25 行(即%sudo ALL=(ALL))之后添加:
username ALL=(ALL) NOPASSWD: /home/username/my_script.sh
Run Code Online (Sandbox Code Playgroud)
现在我们可以sudo在这个脚本中使用而无需输入sudo密码。但是,这可能会导致一些安全问题,所以请参考这个问题:如何在脚本中执行命令而不被要求输入密码?
2. 回答我的第二个问题:
要使此脚本适用于连接的任何 USB 设备,请将udev规则文件的内容更改为:
ACTION=="add", ATTRS{idVendor}=="`****`", ATTRS{idProduct}=="`****`", RUN+="/usr/local/my_script.sh"
Run Code Online (Sandbox Code Playgroud)
星号 ( *) 表示应该为每个连接的 USB 设备执行此操作。
就是这样!确保脚本是可执行的并插入您的 USB!
请享用!
| 归档时间: |
|
| 查看次数: |
27147 次 |
| 最近记录: |