![pacat -p 备份脚本中的某些文件需要 $DISPLAY 用于 X11,为什么?](https://linux22.com/image/1014119/pacat%20-p%20%E5%A4%87%E4%BB%BD%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%9A%84%E6%9F%90%E4%BA%9B%E6%96%87%E4%BB%B6%E9%9C%80%E8%A6%81%20%24DISPLAY%20%E7%94%A8%E4%BA%8E%20X11%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我编写了一个 udev 规则和一个 systemd 单元,因此如果我插入一个特定的硬盘,rsync 会在后台备份我的 /home,并在准备好时播放音频文件。
在我第一次尝试时出现以下错误pulseaudio[8802]: [pulseaudio] main.c: Unable to contact D-Bus: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
注意,我已经修复了这个问题。脚本准备好后,我的声音就恢复了。
但我不明白为什么 pacat 甚至 aplay 需要这个变量来播放音频。我正在使用 xfce4-session 运行 ubuntu bionic。
答案1
和aplay
都是pacat
用户空间程序,所以最简单的方法对于程序员来说要发出声音,就必须使用图书馆,dbus
因为没有一个头脑正常的人会使用这些图书馆cron
,或者在udev
规则中,或者天堂禁止在systemd
吧??? :-)
好吧,他们是对的,直到你出现,你确实采取了正确的解决方案来解决这个问题。
如果您希望在 X 完全不运行的情况下发出声音(例如无头服务器),您可以将ASCII
BEL
¹ 字符回显到tty
。
注1: 007:真复古:哔声比换行(10)、换页(12)或回车(13)更重要......