Показывать уведомление при входе в систему с помощью pam_exec

Этот простой скрипт покажет уведомление Zenity при входе пользователя в систему:

case "$PAM_TYPE" in
    'open_session' )
    if [ "$PAM_SERVICE" = "lightdm" ] ; then
            DISPLAY=:0 sudo -u $PAM_USER notify-send "Hello there!" "Hello"
        else
            echo "Hello there!"
        fi
    ;;
esac

Однако, это будет работать, только если переменная DISPLAY фактически равна 0. И не будет работать для терминала или удаленного устройства ( ssh) логины (очевидно, эхо там никуда не денется). Что я могу сделать с этим?

Мне нужен способ:

  • Получить текущую переменную DISPLAY из среды pam_exec, если я использую графический интерфейс входа в систему
  • Получите текущее консольное устройство или любое другое место, где я могу отправить сообщение на правильную консоль, если я использую консольный интерфейс.
2
задан 14 January 2013 в 17:27

1 ответ

Существует более простой способ отправки уведомлений при входе в систему (без знания переменной DISPLAY или использования команды tty для идентификации вашего терминала).

Чтобы отправить уведомление во время запуска GNOME или другой среды рабочего стола, вы должны создать файл /etc/xdg/autostart/foobar.desktop, который вызывает ваш скрипт с notify-send "Hello there!" "Hello". Проверьте /etc/xdg/autostart/ для примеров. Вы можете сделать копию существующего файла .desktop, переименовать его и изменить для своих нужд. Вы также можете добавить параметр X-GNOME-Autostart-Delay=XX, чтобы установить задержку XX для вашей задачи. Если вам нужно добавить это только для выбранного пользователя, используйте ~/.config/autostart/ этого пользователя для размещения файла .desktop и проверьте с помощью gnome-session-properties, активен ли этот модуль запуска.

Чтобы отправить уведомление о входе в систему через терминал или ssh, вы можете использовать скрипт, помещенный в /etc/profile.d/, или отправить это уведомление, добавив напрямую echo "My Message" в /etc/bash.bashrc. Они оба вызываются из /etc/profile и будут запускаться при каждом входе в интерактивную оболочку, будь то виртуальный терминал или ssh-вход. Для выбранного пользователя используйте ~/.bash_login этого пользователя и поместите туда нужное сообщение. Примечание: использование /etc/bash.bashrc и ~/.bash_login имеет смысл, если используется оболочка bash по умолчанию; если пользователь вызывает какую-то другую оболочку, например /bin/sh/, эти файлы будут игнорироваться.

0
ответ дан 14 January 2013 в 17:27

Другие вопросы по тегам:

Похожие вопросы: