
Я использую evrouter для имитации нажатий клавиш с дополнительных кнопок моей мыши. Он отлично работает, но мне нужно запустить команду с sudo, чтобы он заработал, поэтому я не могу просто использовать DE для обработки автозапуска.
Я рассматривал init.d, но, насколько я слышал, он работает только на разных этапах загрузки, а мне нужно, чтобы он запускался от имени root.послеавторизоваться.
$ cat .evrouterrc
"Logitech G500" "/dev/input/event4" any key/277 "XKey/0"
"Logitech G500" "/dev/input/event4" any key/280 "XKey/9"
"Logitech G500" "/dev/input/event4" any key/281 "XKey/8"
$ sudo evrouter /dev/input/event4
Редактировать:Хорошо, похоже, я могу использовать session-setup-script
опцию lightdm.conf для запуска скрипта как root. Скрипт у меня ниже, но, как и ожидалось, при запуске от root он id -u
больше не равен 1000, а оператор if никогда не выполняется. Есть ли аргумент или переменная, которую я могу использовать для получения имени пользователя или идентификатора?
решение1
После загрузки компьютера Linux запускает все, что находится в файле crontab вашей системы. Cron — это программа, которая планирует запуск команд, программ или скриптов в строго определенное время дня. У каждого пользователя есть crontab, но в этой ситуации для такой работы подходит crontab системы.
Вы можете настроить cron для выполнения команд или программ при загрузке системы. Так что, я думаю, это то, что вы имеете в виду.
Чтобы отредактировать его соответствующим образом, вам нужно будет открыть файл crontab вашей системы, выполнив команду. sudo vim /etc/crontab
Можете смело заменить ``vim" на ваш любимый текстовый редактор cli.
Добавьте строку (заменив соответствующие вещи именно тем, что вам нужно, например, команды и т. д.) ниже всех остальных @reboot evrouter
Примечание: лучшей идеей может быть создание скрипта, размещение в нем команд и запуск скрипта с помощью crontab. Это действительно ваш выбор.
В зависимости от вашего дистрибутива вам может потребоваться или не потребоваться указать, кто должен выполнять команду после @reboot
В большинстве случаев файл crontab будет иметь некоторые комментарии в верхней части файла, чтобы дать вам указания. Конечно, просмотр других записей в этом файле, вероятно, будет наиболее полезным для вас.
решение2
Используя lightdm.conf
значение , session-setup-script
я смог выполнить команду от имени пользователя root, как и ожидалось.
session-setup-script=/opt/hacks/lightdm-startup
Тем временем в другой папке:
#!/bin/bash
if [ "$USER" = "j" ]
then
evrouter /dev/input/event4
fi
Я до сих пор не уверен, почему ==
не сработало в операторе if, а =
сработало... Bash временами ведет себя непредсказуемо.