Модули ядра устанавливаются отдельно для каждой версии. После обновления до новой версии ядра вам необходимо переустановить модули VirtualBox (и любые другие нестандартные модули, такие как видеодрайверы с закрытым исходным кодом).
Для начала, ваши совпадающие директивы серьезно ошибочны: лучшее правило должно соответствовать только для SUBSYSTEM и USB VID и PID.
В любом случае, у вас не может быть просто команд запуска root, которые должны управлять вашим активным X-сеансом. Если вам действительно нужно это сделать, вы должны, по крайней мере, импортировать $ DISPLAY и $ XAUTHORITY, но правильное решение - использовать собственные инструменты среды рабочего стола для запуска этих команд, когда это необходимо.
Скрипты, выполняемые из udev, выполняются в почти пустой среде.Они не привязаны к какому-либо конкретному сеансу или терминалу.
Первое, что вам нужно сделать, это прочитать сообщения об ошибках. Добавить exec >> / var / log / my-udev-script.log 2> & 1; эхо; date
в начале вашего скрипта чуть ниже #!
и просмотрите /var/log/my-udev-script.log
после запуска сценария.
Команда xset
является клиентом X Window System , поэтому ей необходимо взаимодействовать с X-сервером. Он знает, с каким X-сервером разговаривать (их может быть много), по значению переменной среды DISPLAY
. Если DISPLAY
не установлен, xset
не может взаимодействовать ни с одним X-сервером, поэтому все, что он делает, это выводит сообщение об ошибке и завершает работу.
Чтобы выяснить, как установить DISPLAY
и XAUTHORITY
, если необходимо, см. Могу ли я запустить графическую программу на рабочем столе другого пользователя с правами суперпользователя? и Открыть окно на удаленном X-дисплее (почему «Невозможно открыть дисплей»)? Обратите внимание, что может быть сложно понять, что делать, если имеется несколько X-серверов.
Ни xset, ни slock не заботятся о D-Bus. Если вам действительно нужна D-Bus, Как запустить dbus с фиксированным адресом? - самый простой способ.