i3 中的 Dunst,Unity 中的 notify-osd

i3 中的 Dunst,Unity 中的 notify-osd

我在我的机器上测试了 i3wm(sudo apt-get install i3我运行了它,并从登录屏幕中选择了 i3),过了一会儿,我决定切换回 Unity。切换回来后,我注意到尽管我使用的是 Unity,但通知仍然出现在右上角,类似于 i3。

我真的很希望它使用普通的 Unity 通知气泡。

我研究了一下,结果发现使用的是 而notify-osd不是dunst

我尝试使用和编辑该文件,但它具有预期的sudo vim /usr/share/dbus-1/services/org.freedesktop.Notifications.service正确行(即)。Exec=/usr/lib/x86_64-linux-gnu/notify-osd

我也尝试过unity-tweak-tool --reset-unity但是没有任何效果。

我可以恢复正常通知吗?如能得到任何帮助我将不胜感激。谢谢 :)

编辑:我可以通过删除 i3wm 本身(和 dunst)来恢复正常通知。我实际上想问的是:是否可以在系统上保留 i3 和 dunst 的同时更改为正常通知?

注意:这不是重复的Notify-osd 通知在左上角显示为无主题通知。解决方案是删除 dunst,我想保留 dunst,并在选择 i3 时让其工作,并在选择 Unity 时让 notify-osd 工作。

答案1

我意识到我已经迟到了两年,但是如果其他人遇到这个问题,这里有一个解决方案,当登录 Unity 时使用notify-osd,当运行 i3 时使用dunst。

如果您只想保留 dunst 安装,但不想通过 DBus 自动调用它,请跳至快速破解部分。

i3 中的 Dunst,Unity 中的 notify-osd

步骤1

我们想要覆盖的行为,/usr/share/dbus-1/services/org.freedesktop.Notifications.service更重要的是/usr/share/dbus-1/services/org.knopwob.dunst.service

由于 Dbus 在搜索服务文件时会查看 $XDG_DATA_HOME,而 Ubuntu 由于某种原因没有设置该环境变量,因此我们需要自己执行此操作:

echo 'export XDG_DATA_HOME=${XDG_DATA_HOME:="$HOME/.local/share"}' >> ~/.profile 

第2步

我们需要创建我们的服务文件:

mkdir -p $HOME/.local/share/dbus-1/services
nano $HOME/.local/share/dbus-1/services/usernotify.service

使文件看起来像这样:

[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=/usr/bin/my_notifier

步骤3

创建 D-BUS 文件中引用的脚本,如果 i3 正在运行,则调用 dunst,否则调用 noty-osd:

sudo nano /usr/bin/my_notifier

让它看起来像这样:

#!/bin/bash
set -euo pipefail
if pgrep -x i3 >/dev/null; then
    /usr/bin/dunst
else
    /usr/lib/x86_64-linux-gnu/notify-osd
fi

使其可执行:

sudo chmod a+x /usr/bin/my_notifier

步骤4

就这些了。注销然后重新登录。在 Unity 和 i3 中运行以下命令进行测试:

notify-send foo bar

快速破解

如果您只想使用notify-osd,则只需进行/usr/share/dbus-1/services/org.knopwob.dunst.service相应的编辑即可:

[D-BUS Service]
Name=org.freedesktop.Notifications
#Exec=/usr/bin/dunst
Exec=/usr/lib/x86_64-linux-gnu/notify-osd

答案2

sudo apt-get purge dunst

这样就应该可以将其去除。

相关内容