Linux'ta bir bash betiğinden GUI mesaj kutusu nasıl gösterilir?


152

Ubuntu linux altında birkaç küçük bash betiği yazıyorum. Herhangi bir giriş girmek veya herhangi bir çıktı görüntülemek için bir terminal penceresine gerek kalmadan GUI onları çalıştırmak istiyorum.

Şimdiye kadar gereken tek girdi sudo - ve gksudo tutamaçları için bir paroladır. Ancak henüz bir mesaj kutusu göstermenin kolay bir yolunu bulamadım. Kullanılabilir bir tür 'gkmessage' komutu var mı? Varsayılan bir Ubuntu kurulumunda mevcut olan bir şeyi tercih ederim, ancak gerekirse yeni bir paket kurmayı umursamıyorum.


Yanıtlar:


143

Zenity'nin istediğini yapacağına inanıyorum . GTK iletişim kutularını komut satırından görüntülemek için özel olarak tasarlanmıştır ve bir Ubuntu paketi olarak mevcuttur .


4
zenity --helpo kadar yardımcı değil. Bunu yararlı --text=My text herehale getirmek için, bir şey görüntülemeye ayarladığınızdan emin olmanız gerekir ...
Stephen

10
Ör.zenity --info --text="Calculation complete"
Craig McQueen

3
@Stephen, bazı garip nedenlerden dolayı doğru komuttur zenity --help-all.
GKFX

3
Yardım mesajını yazdırmak için ekranı açması gereken programları sevmiyorum ...
thoni56

Sunucumu .xinitrcbaşlatırken içindeki uyarıları veya hataları görüntülemek için bu yöntemi kullanıyorum xorg. Aksi takdirde hatalar şeffaf olacaktır. Ben de bu tercih zenityover kdialogKDE henüz başlamadı ve GTK kütüphaneleri daha hafif olduğu için.
cmevoli

153

Ubuntu birçok dağıtım kullanıyorsanız , notify-sendkomut bu hoş bozulabilir bildirimlerden birini sağ üst köşeye atar. Şöyle ki:

notify-send "My name is bash and I rock da house"

Güzel!


2
Bu Fedora için de geçerlidir. Herhangi bir Linux dağıtımının bunu yapabileceğinden oldukça eminim.
kmatheny

4
Raspbian GNU / Linux 7 üzerinde çalışmaz. Kurulması gereken bir paket var mı?
carl verbiest

1
debian depolarında: apt-cache search notify-osd @carlverbiest
santa

2
en azından Ubuntu 14.04'te, eğer notify-send zaman aşımı 0 ile "notify-send -t 0 'hi there!'"
vancan1ty

Debian Jessie'de libnotify-binpaket notify-sendikiliyi içerir . Gnome3 gerekli görünmüyor notify-osdama sanırım diğer masaüstü ortamları buna ek olarak gerektirebilirlibnotify-bin
Jasen

78

Herkes zenginden bahsediyor, başkaları da var gibi görünüyor. Karışık ama ilginç bir liste http://alternativeto.net/software/zenity/ adresinde

İlk olarak, metin biçimlendirme işaretlemesi, pencere başlığı, düğme etiketi içeren bir zenginlik örneği.

zenity \
--info \
--text="<span size=\"xx-large\">Time is $(date +%Hh%M).</span>\n\nGet your <b>coffee</b>." \
--title="Coffee time" \
--ok-label="Sip"

gxmessage

gxmessage "my text"

xmessage

xmessageçok eskidir, bu nedenle kararlıdır ve muhtemelen X kullanan tüm dağıtımlarda kullanılabilir (X ile dağıtıldığından beri). Linux veya Unix'i ne anlama geldiğini bilecek kadar uzun süredir kullananlar için X kaynakları aracılığıyla özelleştirilebilir .Xdefaults.

xmessage -buttons Ok:0,"Not sure":1,Cancel:2 -default Ok -nearmouse "Is xmessage enough for the job ?" -timeout 10

KDialog

(test edilmedi)

Bir PPA'da

YAD: Steroidlerde Zenity [Kabuk Betiklerinden Grafik İletişim Kutularını Görüntüle] ~ Web Upd8: Ubuntu / Linux blogu . İletişim kutularını otomatik boyutlandırmıyor gibi görünüyor.

echo My text | yad \
--text-info \
--width=400 \
--height=200

Daha büyük bir örnek

yad \
--title="Desktop entry editor" \
--text="Simple desktop entry editor" \
--form \
--field="Type:CB" \
--field="Name" \
--field="Generic name" \
--field="Comment" \
--field="Command:FL" \
--field="Icon" \
--field="In terminal:CHK" \
--field="Startup notify:CHK" "Application" "Name" "Generic name" "This is the comment" "/usr/bin/yad" "yad" FALSE TRUE \
--button="WebUpd8:2" \
--button="gtk-ok:0" \
--button="gtk-cancel:1"

Ubuntu standart depolarında olmayan diğerleri

  • shellgui
  • Xdialog
  • Gtkdialog

Konu Dışı (terminal için)

whiptail --msgbox "my text" 10 20
dialog --msgbox "my text" 10 20

Düzenlemek için çekinmeyin.



@ThorSummoner bahşiş için teşekkürler. İlgilenen okuyucu için fark, whiptail --infobox(alternatif ekranı destekleyen terminallerde düzgün çalışmayan) kullanıcı girişini beklemeden geri dönerken whiptail --msgbox(hangi çalışır) çıkmadan önce kullanıcı onayını bekler.
Stéphane Gourichon

Ben msgbox ile memnun olmadığını hatırlıyorum, o zamanki amaçlar için, ben çıktı bir günlük ya da böyle bir şey görüntülenebilir olması gerektiğini düşünüyorum;
ThorSummoner

Birçok seçenek! Oldukça güzel örnekler
artu-hnrq

49

Zenity uygulama görünür aradığınız şey olması.

Zenity'den girdi almak için bir değişken belirtebilir ve zenityentry çıktısının kaydedilmesini sağlayabilirsiniz . Şuna benziyor:

my_variable=$(zenity --entry)

Şimdi değişkenimdeki değere bakarsanız , zenity açılır giriş iletişim kutusuna yazılan her şey olacaktır.

Kullanıcının (veya sizin) iletişim kutusuna ne girmesi gerektiği konusunda bir tür bilgi vermek istiyorsanız, --text anahtarını istediğiniz etikete ekleyin . Şuna benziyor:

my_variable=$(zenity --entry --text="What's my variable:")

Zenity'nin belirli görevler için başka birçok güzel seçeneği var, bu yüzden bunları zenity --help ile de kontrol etmek isteyebilirsiniz . Bir örnek, grafik takvimden bir tarih seçmenize izin veren --calendar seçeneğidir.

my_date=$(zenity --calendar)

Bu, kullanıcının neyi tıkladığını temel alarak iyi biçimlendirilmiş bir tarih verir:

echo ${my_date}

verir:

08/05/2009

Kaydırıcı seçiciler, hatalar, listeler vb. İçin seçenekler de vardır.

Bu yardımcı olur umarım.


Harika zentitygörünüyor. Ancak Ubuntu 12.04'ün bir parçası değil, gxmessagebunun yerine gittim .
Peter V.Mørch


8

İşte istediğinizi yapacak küçük bir Tcl betiği. İstek yorumlayıcısı varsayılan olarak Ubuntu'ya yüklenmelidir.

#!/usr/bin/wish
pack [label .msg -text [lindex $argv 0]]
pack [entry .ent]
bind .ent <KeyPress-Return> { puts [.ent get]; destroy . }
focus .ent

Buna şöyle deyin:

myanswer=`gui-prompt "type your answer and press enter"`

8

alertve notify-sendaynı şey gibi görünüyor. notify-sendOdak çalmadığı ve giriş yapamadığım mesajlar için kullanıyorum ve zenity vb. Bunu durdurmak için bir yol bulamıyorum.

Örneğin

# This will display message and then disappear after a delay:
notify-send "job complete"

# This will display message and stay on-screen until clicked:
notify-send -u critical "job complete"

6

Ayrıca dialogve KDE sürümü var kdialog. dialogslackware tarafından kullanılır, bu nedenle diğer dağıtımlarda hemen bulunmayabilir.


6

eğer başka bir şey yoksa. bir xterm başlatabilir ve içinde yankılayabilirsiniz:

 xterm -e bash -c 'echo "this is the message";echo;echo -n "press enter to continue "; stty sane -echo;answer=$( while ! head -c 1;do true ;done);'

3

Ubuntu'nun uyarısına ne dersiniz ? Herhangi bir işlemden sonra bittiğini uyarmak ve operatörün hatalarla bitirilmesi durumunda kırmızı çarpı simgesini göstermek için kullanılabilir

ls -la; alert

3

Zenity gerçekten aradığınızı düşündüğüm kesin araç.

veya

zenity --help

0

Kdialog ve diyalog iyi, ancak Zenity'yi tavsiye ederim. Hızlı, kolay ve çok daha iyi görünen xmessage veya iletişim kutusu.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.