我创建了一个小示例脚本,它是我的真实脚本的简化版本,它看起来基本上如下:
#!/bin/bash
echo "start" > /home/myName/log.txt
#get list with all attached devices
for i in $(lsblk -lo name,fstype,hotplug,type|grep '1 part$'|tr -s ' ' ' '|sed 's/ 1 part$//'|grep ' ..*$'|tr ' ' '_')
do
echo $i >> /home/myName/log.txt
done
Run Code Online (Sandbox Code Playgroud)
如果我直接在终端中调用脚本,则一切正常。所以日志文件中的返回是类似的。
start
sdc1_vfat
Run Code Online (Sandbox Code Playgroud)
但是一旦从 udev 规则调用脚本,循环就不再起作用。日志文件中的输出仅
start
Run Code Online (Sandbox Code Playgroud)
循环不再起作用。
/dev/udev/ 中的规则如下所示
SUBSYSTEM=="usb", ACTION=="add", RUN+="/bin/bash /usr/bin/myScript.sh"
Run Code Online (Sandbox Code Playgroud)
有人知道原因可能是什么吗?
这里有一些更多信息以及建议的基于您的答案的修改版本。
这里是 udev 规则:
# check usb sdb1 plugged unplugged
SUBSYSTEM=="block", ACTION=="add", RUN+="/bin/bash /usr/bin/usb_mount.sh"
SUBSYSTEM=="block", ACTION=="remove", RUN+="/bin/bash /usr/bin/usb_unmount.sh"
Run Code Online (Sandbox Code Playgroud)
安装脚本现在看起来如下:
#!/bin/bash
#general definitions
MNT_PATH="/media/USB_DRIVE"
DEV_ID="sdc1"
# check …Run Code Online (Sandbox Code Playgroud) 我有以下组合:
\n屏幕通过 HDMI 连接。\n此组合可实现的最大分辨率为 3440 x 1440 @ 24Hz。\n此分辨率适用于在另一个分区中运行的窗口。
\n所以更新到ubuntu 22.04后,无法用xrandr更改分辨率。
\n这就是我所做的:
\ncvt 3440 1440 24\n\nreturn\n\n# 3440x1440 23.98 Hz (CVT) hsync: 35.08 kHz; pclk: 153.25 MHz\nModeline "3440x1440_24.00" 153.25 3440 3560 3904 4368 1440 1443 1453 1463 -hsync +vsync\nRun Code Online (Sandbox Code Playgroud)\n然后我检查了连接的显示器
\nxrandr --listactivemonitors\n\nreturn\n\n0: +*XWAYLAND0 1920/800x1080/330+0+0 XWAYLAND0\nRun Code Online (Sandbox Code Playgroud)\n我想要更改的屏幕是 XWAYLAND0(主显示屏)
\n所以我添加了一个新模式
\nxrandr --newmode "3440x1440_24.00" 153.25 3440 3560 3904 4368 1440 1443 1453 1463 -hsync +vsync\n …Run Code Online (Sandbox Code Playgroud)