Выполнить команду при входе пользователя

23

В настольной системе Linux я хочу выполнить команду, когда пользователь входит в систему.

Прочитав несколько других постов, я попытался вставить команду, ~/.bashrcно безуспешно. Более того, система использует графический интерфейс для входа пользователя, поэтому команда не должна быть связана с запуском оболочки.

Я также попытался добавить команду к одному из скриптов, содержащихся в нем, /etc/profile.dно безрезультатно.

Есть ли другой способ сделать это? Любой файл, который система читает после входа в систему?

BowPark
источник
askubuntu.com/questions/48321/…
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件

Ответы:

21

Нет гарантии, что менеджер графического отображения будет читать классические файлы запуска. Это меняется между дистрибутивами и между менеджерами отображения. Одно из следующих должно работать, хотя.

  1. Используйте собственный метод среды рабочего стола для настройки запуска приложений. Детали будут зависеть от используемой вами DE, но вы можете создать скрипт, который запускает вашу команду, и добавить его в список запускаемых приложений. Например, в моей системе (Cinnamon) вы можете сделать это через «Системные настройки» => «Запуск приложений».

  2. Использование ~/.xprofile, это добыт по крайней мере, GDM, МЖК, LightDM и LXDM менеджеров входа в систему .

  3. Если ничего из вышеперечисленного не сработало, попробуйте добавить команду в ~/.profile: Это основной файл инициализации для оболочек входа в систему и также читается некоторыми графическими оболочками при входе в систему.

  4. Как отметил @derobert в комментариях, вы также можете использовать бесплатные стандарты рабочего стола :

    Каталогами автозапуска являются $ XDG_CONFIG_DIRS / autostart, как определено в соответствии с разделом «Ссылка на эту спецификацию» в «спецификации базового каталога рабочего стола».

    Если одно и то же имя файла находится в нескольких каталогах автозапуска, следует использовать только файл в самом важном каталоге.

    Пример: если $ XDG_CONFIG_HOME не установлен, каталогом автозапуска в домашнем каталоге пользователя является ~ / .config / autostart /

    Пример: если $ XDG_CONFIG_DIRS не установлен, системный каталог автозапуска будет / etc / xdg / autostart /

    Пример: если $ XDG_CONFIG_HOME и $ XDG_CONFIG_DIRS не заданы и два файла /etc/xdg/autostart/foo.desktop и ~ / .config / autostart / foo.desktop существуют, то только файл ~ / .config / autostart / foo. рабочий стол будет использоваться, потому что ~ / .config / autostart / важнее, чем / etc / xdg / autostart /

Здесь ~/.bashrcэто совершенно не имеет значения, оно читается только интерактивными оболочками, не входящими в систему, поэтому игнорируется в графических оболочках или нет.

Тердон
источник
5
Возможно, стоит упомянуть, ~/.config/autostartи /etc/xdg/autostart/какие из них являются стандартными в соответствии со спецификацией автозапуска приложения для настольного компьютера . А также /etc/X11/Xsession.dи ~/.xsession.
Дероберт
6

Другой вариант - использовать pam - это даст вам точный способ определения действий при входе в систему.

Для общего действия вы можете положиться на pam_exec ( http://manpages.ubuntu.com/manpages/hardy/man8/pam_exec.8.html ). Однако, если вам нужно выполнить более конкретное действие безопасным способом, могут существовать более специализированные модули pam, которые лучше подойдут, такие как обычно используемый pam_mount (для монтирования при входе в систему - http: //manpages.ubuntu. com / manpages / hardy / man8 / pam_mount.8.html ) или pam_echo (для произвольных сообщений пользователям - http://manpages.ubuntu.com/manpages/hardy/man8/pam_echo.8.html ).

В целом, pam - это очень аккуратная система для настройки логинов, поэтому вы можете захотеть взглянуть на нее немного больше, вместо того чтобы полагаться на потенциально небезопасные сценарии, как предлагали другие.

пример

Учитывая довольно типичный /etc/pam.d/system-auth, мы можем использовать pam_exec после входа в систему следующим образом:

session         optional        pam_ssh.so
session         required        pam_limits.so
session         required        pam_env.so
session         optional        pam_mktemp.so
session         required        pam_unix.so
session         optional        pam_exec.so /usr/local/bin/my_prog
session         optional        pam_permit.so

где /usr/local/bin/my_prog- произвольная программа, запускаемая после успешного входа пользователя.

oakad
источник
2
Это хороший ответ, хотя вам следует включить пример строки, в которую вы бы добавили pamконфигурацию, поскольку это нетривиально.
Грэм
2

Согласно этой теме: Запустить команду автоматически после входа в систему?

У вас есть решение .bashrc(не то, что вам нужно) и решение для запуска приложений. Я цитирую Дэниела С .:

gnome-session-properties может быть использован для настройки запуска приложений.

Кроме того, если вы хотите, чтобы приложение запускалось при загрузке системы, вы можете добавить в свой crontab правило, подобное следующему (отредактируйте crontab с помощью crontab -e):

@reboot /run/this/program/at/boot >/dev/null 2>&1
Лоран К.
источник