You are not logged in.
Hi,
After upgrading my arch system, I am having trouble getting my udev setup for auto monitor configuration running again:
/etc/udev/rules.d% cat 99-monitor-hotplug.rules
# this line worked before upgrade
#ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/home/xx/.script/auto_monitor.sh"
# now I have to use this, for the script to be executed, however file writing does not work:
ACTION=="change", SUBSYSTEM=="drm", RUN+="/home/xx/.script/auto_monitor.sh"
My problem is now, that everytime, auto_monitor.sh wants to write to a file it does not work. The following errors appear in the udev log:
Apr 11 10:02:51 e330 systemd-udevd[26263]: RUN '/home/xx/.script/auto_monitor.sh' /etc/udev/rules.d/99-monitor-hotplug.rules:4
Apr 11 10:02:51 e330 systemd-udevd[26263]: handling device node '/dev/dri/card0', devnum=c226:0, mode=0600, uid=0, gid=0
Apr 11 10:02:51 e330 systemd-udevd[26263]: preserve already existing symlink '/dev/char/226:0' to '../dri/card0'
Apr 11 10:02:51 e330 systemd-udevd[26263]: created db file '/run/udev/data/c226:0' for '/devices/pci0000:00/0000:00:02.0/drm/card0'
Apr 11 10:02:51 e330 systemd-udevd[26264]: starting '/home/xx/.script/auto_monitor.sh'
Apr 11 10:02:51 e330 systemd-udevd[26263]: '/home/xx/.script/auto_monitor.sh'(out) 'i am:'
Apr 11 10:02:51 e330 systemd-udevd[26263]: '/home/xx/.script/auto_monitor.sh'(out) 'root'
Apr 11 10:02:51 e330 systemd-udevd[26263]: '/home/xx/.script/auto_monitor.sh'(out) '-rw-r--r-- 1 root root 10446 Apr 11 09:47 /home/xx/.log/auto_monitor'
Apr 11 10:02:51 e330 systemd-udevd[26263]: '/home/xx/.script/auto_monitor.sh'(out) '/dev/sda1 on / type ext4 (ro,relatime,discard,data=ordered)'
Apr 11 10:02:51 e330 systemd-udevd[26263]: '/home/xx/.script/auto_monitor.sh'(err) 'touch: cannot touch '/home/xx/.log/auto_monitor_test''
Apr 11 10:02:51 e330 systemd-udevd[26263]: '/home/xx/.script/auto_monitor.sh'(err) ': Read-only file system'
Apr 11 10:02:51 e330 systemd-udevd[26263]: '/home/xx/.script/auto_monitor.sh'(err) '/home/xx/.script/auto_monitor.sh: line 14: /home/xx/.log/auto_monitor: Read-only file system'
For debugging, I thanged the beginning of the script to:
#!/bin/bash
echo "i am:"
echo `whoami`
echo `ls -l /home/xx/.log/auto_monitor`
echo `mount | grep sda1`
......
touch /home/xx/.log/auto_monitor_test
echo `date` >> /home/xx/.log/auto_monitor
Somehow udev changes the mount options of my file system to ro, while executing the scripts.
However during normal operation the file system is rw:
% mount |grep sda1
/dev/sda1 on / type ext4 (rw,noatime,discard,data=ordered)
Maybe I missed something in the package upgrade notes.
I hope someone could give me a hint, what I might do wrong here.
Last edited by blattlaus (2014-04-11 16:28:38)
Offline
what user is udevd running as?
Offline
Thank you for replying.
I think it is running as root:
% ps aux | grep udev
root 161 0.0 0.0 32000 1824 ? Ss 10:46 0:00 /usr/lib/systemd/systemd-udevd
Last edited by blattlaus (2014-04-11 16:26:17)
Offline
then it shouldn't matter the file permissions, unless it drops permissions when it runs, or it's a folder protected by some other mechanism. what's your file system structure like?
have you tried placing the log outside of /home/ ? maybe in /tmp/ or in /sys/log/ ?
edit: proper engrish
edit2: you can always symlink it later, so location isn't that important
Last edited by HiImTye (2014-04-11 16:34:41)
Offline
hmm I am confused right now.
It suddenly somehow works more or less.
What I did was the following:
I added the line
touch /tmp/auto_monitor_test_file
to my script
executed
sudo udevadm trigger -v -s drm -y card0
then I looked into journalctl -f, to see if errors were reported.
I could not see any output of udev there at all.
nevertheless I checked the /tmp folder and found the file.
The files in my homefolder however were untouched!!!
I restarted udevd (perhaps i also restarted it one step earlier. I can't remember).
Then I remembered that I had to enable verbode logging in udev to see the errors last time.
So I executed:
sudo udevadm control --log-priority=debug
and tested again.
This time I saw the following output in journalctl:
Apr 11 18:53:32 e330 systemd-udevd[26568]: device 0x22a14d0 has devpath '/devices/pci0000:00'
Apr 11 18:53:32 e330 systemd-udevd[26568]: device 0x229cc10 filled with db file data
Apr 11 18:53:32 e330 systemd-udevd[26568]: RUN 'uaccess' /usr/lib/udev/rules.d/73-seat-late.rules:15
Apr 11 18:53:32 e330 systemd-udevd[26568]: RUN '/home/xx/.script/auto_monitor.sh' /etc/udev/rules.d/99-monitor-hotplug.rules:3
Apr 11 18:53:32 e330 systemd-udevd[26568]: handling device node '/dev/dri/card0', devnum=c226:0, mode=0600, uid=0, gid=0
Apr 11 18:53:32 e330 systemd-udevd[26568]: preserve already existing symlink '/dev/char/226:0' to '../dri/card0'
Apr 11 18:53:32 e330 systemd-udevd[26568]: created db file '/run/udev/data/c226:0' for '/devices/pci0000:00/0000:00:02.0/drm/card0'
Apr 11 18:53:32 e330 systemd-udevd[26569]: starting '/home/xx/.script/auto_monitor.sh'
Apr 11 18:53:32 e330 systemd-udevd[26568]: '/home/xx/.script/auto_monitor.sh'(out) 'i am:'
Apr 11 18:53:32 e330 systemd-udevd[26568]: '/home/xx/.script/auto_monitor.sh'(out) 'root'
Apr 11 18:53:32 e330 systemd-udevd[26568]: '/home/xx/.script/auto_monitor.sh'(out) '-rw-r--r-- 1 root root 11003 Apr 11 18:53 /home/xx/.log/auto_monitor'
Apr 11 18:53:32 e330 systemd-udevd[26568]: '/home/xx/.script/auto_monitor.sh'(out) '/dev/sda1 on / type ext4 (rw,noatime,discard,data=ordered)'
Apr 11 18:53:32 e330 systemd-udevd[26568]: '/home/xx/.script/auto_monitor.sh' [26569] exit with return code 0
Apr 11 18:53:32 e330 systemd-udevd[26568]: passed -1 bytes to netlink monitor 0x229c5a0
Apr 11 18:53:32 e330 systemd-udevd[26568]: seq 2096 processed with 0
Apr 11 18:53:32 e330 systemd-udevd[25718]: seq 2096 done with 0
suddenly the filesystem is rw.
and now the files in my home folder also were touched.
I then removed the line, which created the file in /tmp from my script, to restore the original state of the script. => It is still touching the files in my home folder.
I still do not understand the exit code 0, but this might be an other bug in the script.
I do not mark this as solved, as I do not understand what happened, and still can not confirm that it is working correctly.
A friend of mine has the same problem. I will try to reproduce the problem on her system too and report back.
Offline
0 typically means that it exited OK
Offline
/dev/sda1 on / type ext4 (ro,relatime,discard,data=ordered)
Systemd is (almost certainly) starting udev *before* remounting the disk as read/write.
I also do this in busybox (link in my sig), the order being:
1. Mount *temporary* filesystems, e.g. /tmp, /run
2. Start udevd
3. Remount disk read-only
4. fsck disk
5. Remount disk read/write
Offline
Thank you for your replies
Systemd is (almost certainly) starting udev *before* remounting the disk as read/write.
Yes this seems to be the problem somehow.
What I still do not understand is, why my script then does not see the remounted filesystem, as the udev event is triggered way after the system is initialized completely.
Currently I have to restart udev everytime, after I reboot my system.
Before I updated my system, I did not have this problem. Maybe the update changed the init order.
Offline