这个简单的脚本将在用户登录时显示 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_login
bash
/bin/sh/