GNU/Linux >> Belajar Linux >  >> Linux

Menjalankan notifikasi-kirim sebagai root

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.


Linux
  1. Shell mana yang saya jalankan?

  2. Menjalankan Pusat Perangkat Lunak Dari Baris Perintah Sebagai Root?

  3. Bagaimana cara membuat daftar sesi layar yang sedang berjalan?

  1. Cron dengan notifikasi-kirim

  2. Memulihkan Kata Sandi Root

  3. Bagaimana cara mengetahui apakah httpd sedang berjalan atau tidak melalui baris perintah?

  1. Menggunakan Notify-send Dengan Cron?

  2. Bagaimana Kami Mengubah Kata Sandi Root?

  3. Meminta pengguna untuk login sebagai root saat menjalankan skrip shell