使用 pam_exec 登录时显示通知

使用 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) 登录(显然,那里的回显似乎无处可去)。我该怎么办?

我需要一种方法来:

  • 如果我使用图形登录界面,则从 pam_exec 环境获取当前 DISPLAY 变量
  • 如果我使用控制台界面,则获取当前控制台设备或任何可以向正确控制台发送消息的地方。

答案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,并将在每次登录交互式 shell 时运行,无论是虚拟终端还是 ssh 登录。对于选定的用户,使用~/.bash_login该用户并将所需的消息放在那里。笔记:如果使用默认shell,/etc/bash.bashrc那么和的使用是有意义的;如果用户调用其他 shell,例如,这些文件将被忽略。~/.bash_loginbash/bin/sh/

相关内容