我正在使用带有 KDE/Awesome WM 的 Arch Linux。我正在尝试
notify-send
与cron
.
我试过设置DISPLAY
/XAUTHORITY
变量,并notify-send
使用“sudo -u”运行,但都没有结果。
我能够从会话中以交互方式调用通知发送并获取通知。
FWIW,cron 作业运行良好,我通过将内容回显到临时文件进行了验证。只是“通知发送”不起作用。
代码:
[matrix@morpheus ~]$ crontab -l
* * * * * /home/matrix/scripts/notify.sh
[matrix@morpheus ~]$ cat /home/matrix/scripts/notify.sh
#!/bin/bash
export DISPLAY=127.0.0.1:0.0
export XAUTHORITY=/home/matrix/.Xauthority
echo "testing cron" >/tmp/crontest
sudo -u matrix /usr/bin/notify-send "hello"
echo "now tested notify-send" >>/tmp/crontest
[matrix@morpheus ~]$ cat /tmp/crontest
testing cron
now tested notify-send
[matrix@morpheus ~]$
Run Code Online (Sandbox Code Playgroud)
如您所见,通知发送之前和之后的回声有效。
我也试过设置DISPLAY=:0.0
更新:我搜索了一些,发现需要设置DBUS_SESSION_BUS_ADDRESS。在使用我从交互式会话中获得的值对其进行硬编码后,屏幕上每分钟都会弹出一个小小的“你好”消息!
但问题是这个变量不是永久的,所以我会尝试那里建议的命名管道解决方案。
[matrix@morpheus ~]$ cat scripts/notify.sh
#!/bin/bash …
Run Code Online (Sandbox Code Playgroud) 该notify-send
命令手册说
Usage:
notify-send [OPTION...] <SUMMARY> [BODY] - create a notification
Help Options:
-?, --help Show help options
Application Options:
-u, --urgency=LEVEL Specifies the urgency level (low, normal, critical).
-t, --expire-time=TIME Specifies the timeout in milliseconds at which to expire the notification.
-i, --icon=ICON[,ICON...] Specifies an icon filename or stock icon to display.
-c, --category=TYPE[,TYPE...] Specifies the notification category.
-h, --hint=TYPE:NAME:VALUE Specifies basic extra data to pass. Valid types are int, double, string and byte.
-v, --version Version of …
Run Code Online (Sandbox Code Playgroud) 通知不适用于 Linux 独立窗口管理器(Openbox、Awesome WM 等)。我尝试安装notification-daemon和dunst,但发送时notify-send "something"
没有弹出任何窗口。
我试图运行 polkit-gnome-agent 并直接运行通知守护进程,但它没有帮助(之前我用这种方式解决了类似的问题,但现在它什么也不做)。
除非我用 python 发送微不足道的通知,否则没有任何错误迹象,然后我只收到模糊的错误消息:
File "/usr/lib/python3.3/site-packages/gi/types.py", line 113, in function
return info.invoke(*args, **kwargs)
gi._glib.GError: Could not connect: Connection refused
Run Code Online (Sandbox Code Playgroud)
琐碎的 C 程序不输出任何内容(例如没有错误)。
我正在将 Archlinux 与 systemd 和 d-bus 一起使用,我怀疑是 polkit 或某种守护程序没有在窗口管理器启动时运行的问题,但不知道我可以尝试什么或如何获得更有意义的错误消息。
编辑:我从那里获取了示例代码:https : //wiki.archlinux.org/index.php/Libnotify#Python
Dbus 应该正在运行,因为 systemd 将其作为依赖项。我已经libnotify
安装 - 它是提供notify-send
. 此外,通知守护程序应根据需要启动(仅当通知到达时),通过以下桌面文件/usr/share/dbus-1/services/org.freedesktop.Notifications.service
:
[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=/usr/bin/dunst
Run Code Online (Sandbox Code Playgroud)
我什至尝试过直接运行守护进程(只是执行)并尝试发送通知。如果有人知道我如何才能获得更多信息,请不要犹豫,提出建议。
编辑 2:我尝试使用 sudo: sudo notification-daemon_name &
(在我的情况下sudo dunst &
)和运行通知守护程序sudo notify-send something
,然后通知工作。但是,当我尝试以非特权用户身份执行之前的任何操作(这很重要,大多数程序以非特权用户身份发送通知)时,没有任何显示。 …
也许这是在其他地方回答的,但我没有看到。
我正在运行 Ubuntu 14.04。例如,当我通过 SSH 连接到我的机器时:
ssh <user>@<machineip> notify-send "Hello"
Run Code Online (Sandbox Code Playgroud)
我在登录到机器的监视器上没有看到任何内容。如果我前缀notify-send
与DISPLAY=:0.0
或DISPLAY=:0
没有不同情况。我只是从未在当前会话中看到任何通知。
是否有一些技巧/开关可以让这个工作?
如果不清楚,请允许我重申:从计算机 A,我通过 SSH 连接到计算机 B。在 SSH 会话中,我希望执行 notify-send 以在计算机 B 上运行。我希望出现咆哮类型的通知在计算机 B 的显示器上。
我写了一个脚本来生成这样的通知:
notify-send -i audio-card "Transferring audio playback to speakers." \
"Audio playback has been transferred to the analog output speaker system."
Run Code Online (Sandbox Code Playgroud)
有什么方法可以从命令行或 Python 清除或替换这些通知?本质上,我有一个脚本可以在两个 PulseAudio 接收器之间切换,如果用户快速切换,我想清除以前的此类通知以将它们替换为更新的文本。
当我notify-send
用来发送一条简单的消息到notification-daemon
:
notify-send "hello"
Run Code Online (Sandbox Code Playgroud)
它不仅会显示消息,还会创建一个系统托盘图标,如下面的屏幕截图所示:
此图标将保留在系统托盘中,直到我单击它并选择“清除所有通知”。这个图标完全违背了notify-send
作为不显眼的通知的目的。我notify-send
几年前使用过,我确信它没有任何托盘图标。不用说,这绝对令人讨厌。
我发现我可以使用transient
选项
notify-send --hint=int:transient:1 hello
Run Code Online (Sandbox Code Playgroud)
这使得图标在一段时间后消失。这更好,但仍然不能接受。
有没有办法完全摆脱托盘图标?
我在 Debian Wheezy 上使用 LXDE
一些答案表明,这是由我的桌面环境 (LXDE) 引起的。
我觉得很难相信。我仍然怀疑这是由通知守护程序引起的。我已经下载了notification-daemon
包的源代码CHANGELOG
,其中包括:
- 添加了对将上下文通知附加到系统托盘上的图标的更好支持,即使它移动时也是如此。科林沃尔特斯的补丁。
这似乎是我抱怨的“功能”。
有人可以建议如何禁用系统托盘通知notification-daemon
吗?当我 greptray
或的来源时systray
,我什么也没找到。我不知道从哪里开始。
假设我使用notify-send
这些长消息:
notify-send 'd: title, up/down: zoom, w: win_to_img, </>: rotate, *: orig, Enter/0: blah blah blah'
Run Code Online (Sandbox Code Playgroud)
但它会截断消息,只显示其中的一部分,而没有查看完整消息的选项:
使用 Fedora 21,我能够查看完整消息(在底部弹出滚动条),但使用 Fedora 24 则无法查看。
版本notify-send
是 libnotify-0.7.6-8.fc24.i686。
无论如何要在 Fedora 24 中显示完整消息吗?
有时我会在桌面通知中收到错误消息,例如:
不幸的是,很难调试它。我无法xprop
查看发送它的进程 ID。它声称来自 VBoxClient,但我不能确定。我什至无法复制通知气泡中的文本。我能做的最好的就是截图。
是否有某种方法可以将桌面通知记录到/var/log/messages
或以其他方式获取有关发送它的进程的信息,或者至少是通知本身的文本?
我已经libnotify-bin
安装了,但是当我输入时
notify-send "hello"
Run Code Online (Sandbox Code Playgroud)
没发生什么事。没有错误,没有消息我有必要的包:
# dpkg -l | grep notify
ii libnotify-bin
ii libnotify4:amd64
Run Code Online (Sandbox Code Playgroud)
可能是什么问题呢?
我在 Debian Wheezy 上使用 LXDE
虽然@Anthon 建议的解决方案有效(安装notification-daemon
),但我不确定这是否是“最佳”解决方案。我期待,这是足有libnotify-bin
和libnotify4
和dbus
安装。Inedeed,在我的另一台机器上,notify-send 没有notification-daemon
.
有人可以澄清是否notification-daemon
有必要吗?
根据 Bash:特殊参数:
($!) 扩展到最近放入后台的作业的进程 ID,无论是作为异步命令执行还是使用 bg 内置
我可以按如下方式使用它:
$ leafpad &
[2] 3962
$ kill $!
Run Code Online (Sandbox Code Playgroud)
这有效并杀死最近的进程(例如leafpad
),但notify-send
它似乎不起作用:
$ notify-send Hello &
[2] 4052
$ kill $!
bash: kill: (4052) - No such process
Run Code Online (Sandbox Code Playgroud)
我必须使用killall notify-osd
才能杀死它。
所以,我想知道为什么kill $!
不起作用notify-send
?杀死这样一个进程的正确方法是什么?
注意:我知道我可以指定超时,但这是一个不同的问题。
我使用的是 Linux Mint 18.1,MATE。
我正在使用 notify-send 命令来可视化键的名称(例如<enter>
),同时通过 python 脚本将它们发送到当前窗口。大约两周以来,notify-send 显示出一种奇怪的行为。我知道 bash 的基本语法是notify-send [OPTIONS] <summary> [body]
.
执行时notify-send -t 0 '<enter>' 'text body'
,一切看起来都很好:
但是,当尝试使用 打印消息正文中的密钥名称时notify-send -t 0 'Summary' '<enter>'
,我得到:
同样的情况发生在notify-send -t 0 'Summary' '<'
, notify-send -t 0 'Summary' '>'
或notify-send -t 0 'Summary' \<
如果正文包含 < 或 > ,为什么正文打印为空白有什么想法吗?
我尝试使用 python 模块代替:
from gi.repository import Notify
Notify.init("App Name")
Notify.Notification.new("Summary","<enter>").show()
Run Code Online (Sandbox Code Playgroud)
但结果与上图 2 中的结果相同。
zenity --info --title='Summary' --text='<enter>'
在 bash …
我使用 arch linux 和 i3wm。我的通知不起作用。当我dunst
在命令行中输入时,它会响应:
警告:未找到 dunstrc。
当我输入时notify-send --icon=gtk-info Test "This is a test"
,它会一直运行,直到我用crt+cdunstify --action="replyAction,reply" "Message received"
杀死它,而没有任何通知显示。
该/etc/X11/xinit/xinitrc.d/30-dbus.sh
文件的内容:
#!/bin/bash
# launches a session dbus instance
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && type dbus-launch >/dev/null; then
eval $(dbus-launch --sh-syntax --exit-with-session)
fi
Run Code Online (Sandbox Code Playgroud)
这是我的journalctl
:
18:57:43 arch-thinkpad systemd[562]: Starting Dunst notification daemon...
18:57:43 arch-thinkpad dunst[49939]: CRITICAL: Cannot open X11 display.
18:57:43 arch-thinkpad systemd[562]: dunst.service: Main process exited, code=exited, status=1/FAILURE
18:57:43 arch-thinkpad systemd[562]: dunst.service: …
Run Code Online (Sandbox Code Playgroud) libnotify ×12
notify-send ×4
lxde ×2
arch-linux ×1
bash ×1
cron ×1
d-bus ×1
debian ×1
freedesktop ×1
gnome-shell ×1
i3 ×1
kill ×1
openbox ×1
panel ×1
python ×1
scripting ×1
shell ×1
ssh ×1
x-server ×1
xorg ×1