wall tidak disiarkan ke terminal GUI pada 16.04

11

Judul itu merangkumnya. Running wall <<< "TEST"menunjukkan pesan dalam TTY apa pun tetapi tidak di terminal GUI mana pun (diuji dengan gnome-terminaldan sakura).

Saya memiliki beberapa skrip pemantauan suhu dan baterai yang mengandalkan wallpesan dan setelah pemutakhiran baru-baru ini ke 16,04 saya perhatikan mereka berhenti bekerja di GUI.

Saya tidak dapat menentukan apakah ini bug atau sesuatu yang mencegah pesan ditampilkan di GUI.

Bagaimana saya harus melanjutkan ?

Informasi tambahan:

Berjalan byobudi terminal gui memungkinkan melihat pesan dinding

Sergiy Kolodyazhnyy
sumber
2
Mungkin terkait dengan askubuntu.com/questions/12654/... (melihat ke dalam xmessage, gxmessageatau notify-send)
Nick Weinberg
6
Saya sudah membaca itu sebelumnya hari ini. Ya, agak terkait, tetapi keberatan besar adalah 1) pertanyaan itu dari 10.10, dan wall telah bekerja di 14.04 2) solusi asalkan tidak memuaskan bagi saya. notify-send hanya berfungsi untuk pesan singkat dan hanya di GUI. wallmemiliki kenyamanan baik menggunakan satu perintah untuk semua terminal, daripada menulis sesuatu untuk tty AND untuk gui DAN untuk semua sesi lain yang mungkin ada di DISPLAYs lain , jadi ini bukan alternatif yang sangat baik, setidaknya imho
Sergiy Kolodyazhnyy
Saya memiliki masalah yang sama baru-baru ini di 15.010. Saya pada 16,04 Ubuntu Mate, dan tampaknya berfungsi di sini. mungkin ada masalah di perpustakaan yang mendasarinya. Mungkin melihat apa yang dilakukan perintah mesg? cara shutdown -k 5 bekerja di semua terminal virtual? Apakah fungsi tulis dengan benar? Saya akan melihat kode sumber jika saya menemukan mesin lain yang tidak berfungsi. Saya menduga ini masalah perpustakaan ruang pengguna.
j0h
1
@ j0h sebenarnya, masalah ini disebabkan gnome-terminal. Ini digunakan untuk memperbarui catatan login, jadi misalnya jika Anda menjalankan whodi terminal gnome sebelumnya, saya akan menunjukkan semua tab yang terbuka tetapi tidak lagi. Wall hanya mengirim pesan ke sesi terminal yang memperbarui catatan login. Mate menggunakan terminal yang berbeda secara default. Saya sudah mengetahui hal ini sejak lama tetapi sebenarnya tidak pernah memposting jawaban. Akan melakukannya di beberapa titik minggu ini.
Sergiy Kolodyazhnyy
Saya punya ide bagaimana Anda bisa meretas ini: Situs
Stancu Mihai

Jawaban:

5

Karena cara kerja terminal gnome, walltidak mendaftarkannya sebagai terminal. Penjelasan lebih lengkap dapat ditemukan di sini . Saya berasumsi bahwa hal yang sama berlaku untuk sakura.

Berdasarkan jawaban Stancu Mihai , saya telah membuat skrip yang meniru cara wallkerjanya, termasuk spanduk dengan nama pengguna dan stempel waktu (gunakan -n atau --nobanner untuk menghapus spanduk). Script saat ini tidak mendukung membaca pesan dari file.

Anda dapat mengganti wallperintah normal dengan yang ini dengan menambahkan alias di ~/.bashrc:

echo 'alias wall="~/your/path/to/wall.sh"' >> ~/.bashrc

Contoh penggunaan:

$ wall "some message"

Broadcast message from username@hostname (pts/19) (Wed Mar 29 11:07:35 2017):

some message

$ wall -h

Usage:
 wall [options] [message]

Write a message to all users.

Options:
 -n, --nobanner          do not print banner
 -h, --help              display this help and exit
danmou
sumber
Kerja bagus @danmou!
Stancu Mihai
1

Ya benar bahwa gnome-terminal tidak memperbarui catatan login, karena itu saya mencoba mencari solusi lain:

  1. Mari kita cari tahu semua terminal pseudo aktif
ps -ef | grep " pts/" | awk '{print $6}' | sort -u | tee terminals4message.txt

Ini membantu Anda untuk membuat daftar semua sesi terminal desktop.

Cara lain untuk mengirim pesan ke sesi terminal desktop aktif

echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number
  1. Jangan lupa tentang tty sesion
ps -ef | grep " tty" | awk '{print $6}' | sort -u | grep -v "pts" | tee terminals4message.txt

Ini membantu Anda untuk membuat daftar semua sesi pty

  1. Mengirim pesan ke semua
cat terminals4message.txt | while read TTY_TO; do echo -e "SYSTEM MESAGE: $(date) - \n MESAJ" | sudo tee /dev/$TTY_TO 1>/dev/null
  1. Sekarang mari kita selesaikan semuanya. Anda dapat membuat skrip yang bagus untuk mengganti aplikasi dinding Anda saat ini dan mengintegrasikan semua hal di atas.
    Setelah itu Anda dapat menambahkan ke ~ / .bashrc alias wall="your_wall_replacement.sh" Anda dengan cara ini Anda tidak perlu menghapus dinding saat ini

Maaf jika ada yang tidak beres, karena seseorang tidak membiarkan saya fokus pada subjek ini ... jika kalian melihat sesuatu yang aneh, silakan tinggalkan komentar.

10x

Stancu Mihai
sumber
Berikut ini satu-liner untuk itu. Saya mengganti awk dengan cut sehingga hanya memiliki satu jenis kutipan. ps -ef | grep -e " tty" -e " pts/" | tr -s " " | cut -d " " -f 6 | sort -u | while read TTY; do echo "MESSAGE" | tee /dev/$TTY 1>/dev/null; done
CJxD
0

Seperti yang orang lain sarankan ada banyak metode, saya taruh di sini metode yang lebih langsung (mudah) yang saya temukan (adopsi echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number: dibahas di sini.)

echo "Your message" > /dev/pts/$terminal-no

Di sini terminal-nodapat diperoleh dari terminal lain melalui perintah "tty".

tty

/dev/pts/12

Braghade
sumber