Layanan notifikasi telah diubah untuk ubuntu 14.04
.
Namanya sekarang seperti org.freedesktop.Notifications.service
Anda dapat memeriksa di sini untuk informasi lebih lanjut tentang Notification On Screen Display
kemungkinan.
Anda juga dapat menggunakan baris perintah berikut untuk mengirim pesan Anda sendiri
[email protected] ~$ notify-send “Teks pesan”
Perbarui saja skrip Anda yang diluncurkan oleh udev
untuk menggunakannya.
Untuk mengatasi masalah terkait dengan menjalankan notify-send
perintah sebagai root.
Coba jalankan sebagai pengguna normal Anda, mis.
su <YOURUSER> -c 'notify-send “Text of message”'
Saya mencoba solusi Fabio A. Namun, saya perhatikan bahwa itu tidak bekerja secara konsisten pada instalasi Arch Linux saya. Masalahnya adalah who
itu tidak menampilkan nomor port untuk sesi tty1:
$ who
john tty1 2021-03-21 09:02
Saya menjalankan i3 melalui exec startx
pada instalasi Arch saya. Di sisi lain, saya perhatikan bahwa output dari who
pada instalasi desktop Ubuntu tampak sangat berbeda. Di sini, nomor tampilan ditampilkan:
$ who
john :0 2021-03-21 09:49 (:0)
Jadi saya mencari solusi lain untuk menghilangkan who
memerintah. Saya menemukan bahwa ps aux
berisi entri berguna ini yang berisi nomor tampilan dan juga nama pengguna:
$ ps aux | grep xinit
john 785 763 0 19:14 tty1 S+ 0:00 xinit /home/john/.xinitrc -- /etc/X11/xinit/xserverrc :0 vt1 -keeptty -auth /tmp/serverauth.gGcqw2rJXG
Ini adalah skrip baru yang saya tulis:
#/bin/bash
xinit_pid=$(pgrep xinit)
if [ -n "xinit_pid" ]; then
xinit_ps=$(ps --no-headers -f $xinit_pid | head -n 1)
display=$(echo "$xinit_ps" | grep -Po " :[0-9]+ " | tr -d " ")
user=$(echo "$xinit_ps" | cut -d " " -f 1)
uid=$(id -u $user)
echo "Display environment: $display $user $uid"
sudo -u $user DISPLAY=$display DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus notify-send "[email protected]"
else
echo "Warning: Could not find xinit process!"
fi
Skrip lain apa pun dapat memanggil skrip ini melalui:
bash /opt/notify-send-helper Title Message -t 5000
Sebagai tambahan:Saya menggunakan dunstify
bukannya notify-send
. dunstify
memiliki keuntungan karena dapat menetapkan ID ke notifikasi:Hanya notifikasi terbaru untuk ID yang sama yang ditampilkan.
EDIT:Saya biasa menanyakan proses "Xorg". Namun, anehnya saya perhatikan di satu mesin bahwa proses ini dijalankan sebagai root. Saya beralih ke proses "xinit" yang berfungsi sama tetapi tampaknya selalu dijalankan oleh pengguna biasa.
Untuk mengirim pemberitahuan desktop dari skrip latar belakang yang berjalan sebagai root
(ganti X_user dan X_userid dengan masing-masing user dan userid yang menjalankan X):
sudo -u X_user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/X_userid/bus notify-send 'Hello world!' 'This is an example notification.'
Ini diambil dari:https://wiki.archlinux.org/index.php/Desktop_notifications
Menggabungkan jawaban tomy dengan jawaban hongo untuk pertanyaan lain secara elegan menyelesaikan masalah bagi saya.
function notify-send() {
#Detect the name of the display in use
local display=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)"
#Detect the user using such display
local user=$(who | grep '('$display')' | awk '{print $1}' | head -n 1)
#Detect the id of the user
local uid=$(id -u $user)
sudo -u $user DISPLAY=$display DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus notify-send "[email protected]"
}
Fungsi itu dapat digunakan apa adanya dalam skrip apa pun yang berjalan sebagai root
, sebagai pengganti drop-in untuk notify-send
perintah.