跨多版本Ubuntu衍生发行版批量推送通知的可行性及问题咨询
SSH批量推送桌面通知的可靠性分析
- 针对你每个办公室推送1-2台设备的场景,用SSH实现完全可靠,理由如下:
- 所有Ubuntu衍生发行版(MATE、Xubuntu、Lubuntu等)默认支持SSH服务,只要设备开启SSH并配置好免密登录,脚本就能快速遍历目标设备执行命令。
- 桌面通知依赖的
notify-send是Freedesktop标准工具,各衍生版桌面环境都兼容,仅需根据不同桌面调整DBUS相关环境变量即可。 - 单办公室1-2台设备的规模,不会遇到网络或性能瓶颈,脚本执行效率很高。
Ubuntu MATE 20.04中notify-send报错的解决方法
你碰到的GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown错误,根源是仅设置DISPLAY环境变量不够——桌面通知需要关联当前登录用户的DBUS会话总线,否则系统找不到通知服务。
解决步骤:
获取当前登录用户的DBUS地址
在目标设备上,用登录用户执行以下命令获取DBUS_SESSION_BUS_ADDRESS的值:echo $DBUS_SESSION_BUS_ADDRESS若通过SSH远程操作,也可通过进程信息自动获取(针对MATE桌面):
grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $USER mate-session)/environ | cut -d= -f2-其他桌面环境可替换会话进程名:Xubuntu用
xfce4-session,Lubuntu用lxsession。同时设置DISPLAY和DBUS_SESSION_BUS_ADDRESS
导出两个环境变量后再执行notify-send,示例:export DISPLAY=:0 export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send "Titulo" "Hola"注意:
1000是当前登录用户的UID,可通过id -u命令查看实际值。批量脚本优化方案
编写批量推送脚本时,可自动在远程设备获取环境变量并执行通知,示例:# 定义要执行的远程命令 REMOTE_CMD=' USER_UID=$(id -u) export DISPLAY=:0 export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USER_UID/bus notify-send "办公室通知" "请注意即将进行网络维护" ' # 遍历目标设备列表执行 for HOST in office-pc-1 office-pc-2; do ssh $HOST "$REMOTE_CMD" done
内容的提问来源于stack exchange,提问作者Damaso.jpg
相关产品推荐
相关产品推荐

