วิธีการแสดงกล่องข้อความ GUI จากสคริปต์ทุบตีใน linux?


152

ฉันกำลังเขียนสคริปต์ทุบตีเล็กน้อยภายใต้ Ubuntu linux ฉันต้องการที่จะเรียกใช้พวกเขาจาก GUI โดยไม่ต้องใช้หน้าต่างเทอร์มินัลเพื่อป้อนอินพุตหรือดูเอาต์พุตใด ๆ

จนถึงตอนนี้อินพุตที่จำเป็นเท่านั้นคือรหัสผ่านสำหรับ sudo - และ gksudo จัดการได้ดี แต่ฉันยังไม่พบวิธีที่ง่ายในการแสดงกล่องข้อความ มีคำสั่ง 'gkmessage' บ้างไหม? ฉันต้องการบางสิ่งบางอย่างในการติดตั้งเริ่มต้นของ Ubuntu แต่ฉันไม่รังเกียจที่จะติดตั้งแพ็คเกจใหม่หากจำเป็น


คำตอบ:


143

ฉันเชื่อว่าเซนิตจะทำสิ่งที่คุณต้องการ มันออกแบบมาโดยเฉพาะสำหรับการแสดงไดอะล็อก GTK จากบรรทัดคำสั่งและก็ใช้ได้เป็นแพคเกจอูบุนตู


4
zenity --helpไม่เป็นประโยชน์ เพื่อให้เป็นประโยชน์คุณต้องให้แน่ใจว่าคุณตั้งค่า--text=My text hereเพื่อให้มันแสดงบางสิ่งบางอย่าง ...
Stephen

10
เช่นzenity --info --text="Calculation complete"
Craig McQueen

3
@Stephen zenity --help-allด้วยเหตุผลบางอย่างแปลกคำสั่งที่ถูกต้องคือ
GKFX

3
ฉันไม่ชอบโปรแกรมที่ต้องเปิดจอแสดงผลเพื่อพิมพ์ข้อความช่วยเหลือ ...
thoni56

ฉันใช้วิธีนี้เพื่อแสดงคำเตือนหรือข้อผิดพลาดภายใน.xinitrcขณะที่เริ่มต้นxorgเซิร์ฟเวอร์ มิฉะนั้นข้อผิดพลาดจะโปร่งใส ฉันชอบสิ่งนี้zenityมากกว่าkdialogเนื่องจาก KDE ยังไม่ได้เริ่มและ GTK libs มีน้ำหนักเบากว่า
cmevoli

153

หากคุณใช้Ubuntuหลาย distros notify-sendคำสั่งจะโยนหนึ่งในการแจ้งเตือนที่เน่าเสียง่ายเหล่านี้ที่มุมขวาบน ชอบมาก

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

สวย!


2
สิ่งนี้ใช้ได้กับ Fedora เช่นกัน ฉันค่อนข้างมั่นใจว่า Linux distro ใด ๆ สามารถทำได้
kmatheny

4
ใช้งานไม่ได้กับ Raspbian GNU / Linux 7. มีแพ็คเกจที่ต้องติดตั้งหรือไม่?
คาร์ล verbiest

1
ใน repos debian: apt-cache search-osd @carlverbiest ค้นหา
santa

2
ใน Ubuntu อย่างน้อย 14.04 ถ้าการแจ้งเตือนการโทร - ส่งด้วยการหมดเวลา 0 เช่นนั้น "การแจ้งเตือนการส่ง - t 0 'สวัสดี!'" คุณจะได้รับกล่องโต้ตอบป๊อปอัพซึ่งไม่หมดอายุ
vancan1ty

ใน Debian Jessie libnotify-binแพ็คเกจประกอบด้วยnotify-sendไบนารี ดูเหมือนว่า Gnome3 จะไม่ต้องการnotify-osdแต่ฉันเดาว่าสภาพแวดล้อมเดสก์ท็อปอื่น ๆ อาจต้องการสิ่งนั้นเพิ่มเติมlibnotify-bin
Jasen

78

ทุกคนกล่าวถึงความสงบเสงี่ยมดูเหมือนว่าจะมีอีกหลายคน รายการผสม แต่น่าสนใจอยู่ที่http://alternativeto.net/software/zenity/

ก่อนอื่นตัวอย่างของความเป็นเอกสิทธิ์ที่มีมาร์กอัปการจัดรูปแบบข้อความชื่อหน้าต่างป้ายกำกับปุ่ม

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เก่ามากจึงมีความเสถียรและอาจมีอยู่ในการแจกแจงทั้งหมดที่ใช้ X (เนื่องจากมีการแจกจ่ายด้วย X) มันสามารถปรับแต่งได้ผ่านทรัพยากร X สำหรับผู้ที่ใช้ Linux หรือ Unix นานพอที่จะรู้ว่ามันหมายถึงอะไร ( .Xdefaultsใคร?)

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

kdialog

(ไม่ผ่านการทดสอบ)

ใน PPA

Yad: Zenity เตียรอยด์ [Display กราฟิกโต้ตอบจากเชลล์สคริปต์] ~ เว็บ Upd8: อูบุนตู / Linux บล็อก ดูเหมือนจะไม่เป็นกล่องโต้ตอบขนาดอัตโนมัติ

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

ตัวอย่างที่ใหญ่กว่า

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

  • shellgui
  • xdialog
  • gtkdialog

นอกหัวข้อ (สำหรับเทอร์มินัล)

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

รู้สึกอิสระที่จะแก้ไข



@ThorSummoner ขอบคุณสำหรับเคล็ดลับ สำหรับผู้อ่านที่สนใจความแตกต่างคือwhiptail --infobox(ซึ่งทำงานได้ไม่ถูกต้องบนหน้าจอเทอร์มินัลที่รองรับหน้าจอทางเลือก) กลับมาโดยไม่ต้องรออินพุตของผู้ใช้ในขณะที่whiptail --msgbox(ซึ่งใช้ได้) รอการยืนยันจากผู้ใช้ก่อนออก
Stéphane Gourichon

ฉันจำได้ว่าไม่พึงพอใจกับ msgbox สำหรับวัตถุประสงค์ของฉันในเวลานั้นฉันคิดว่าฉันต้องการให้เอาต์พุตสามารถดูได้ในบันทึกหรืออะไรทำนองนั้น
ThorSummoner

ตัวเลือกมากมาย! ตัวอย่างที่ดีงาม
artu-hnrq

49

zenityแอพลิเคชันจะปรากฏขึ้นจะเป็นสิ่งที่คุณกำลังมองหา

ในการรับอินพุตจากzenityคุณสามารถระบุตัวแปรและบันทึกเอาต์พุตของzenity --entryไว้ ดูเหมือนว่า:

my_variable=$(zenity --entry)

หากคุณดูค่าในmy_variableตอนนี้มันจะเป็นสิ่งที่พิมพ์ในกล่องโต้ตอบรายการป๊อปอัพ zenity

หากคุณต้องการให้พรอมต์บางอย่างเกี่ยวกับสิ่งที่ผู้ใช้ (หรือคุณ) ควรป้อนในกล่องโต้ตอบเพิ่มสวิตช์- textกับฉลากที่คุณต้องการ ดูเหมือนว่า:

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

Zenity มีตัวเลือกมากที่ดีอื่น ๆ ที่มีการงานที่เฉพาะเจาะจงเพื่อให้คุณอาจต้องการตรวจสอบเหล่านั้นออกเป็นอย่างดีด้วยzenity --help ตัวอย่างหนึ่งคือ - ปฏิทินตัวเลือกที่ให้คุณเลือกวันที่จากปฏิทินกราฟิก

my_date=$(zenity --calendar)

ซึ่งให้วันที่ในรูปแบบที่ดีขึ้นอยู่กับสิ่งที่ผู้ใช้คลิก:

echo ${my_date}

ให้:

2009/08/05

นอกจากนี้ยังมีตัวเลือกสำหรับตัวเลือกแถบเลื่อนข้อผิดพลาดรายการและอื่น ๆ

หวังว่านี่จะช่วยได้


ฉันมองเห็นzentityเท่ห์ อย่างไรก็ตามมันไม่ได้เป็นส่วนหนึ่งของ Ubuntu 12.04 ดังนั้นฉันจึงไปด้วยgxmessageแทน
Peter V. Mørch


8

นี่คือสคริปต์ Tcl เล็กน้อยที่จะทำสิ่งที่คุณต้องการ ควรติดตั้งล่าม Wish เป็นค่าเริ่มต้นบน Ubuntu

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

เรียกว่าเป็นแบบนี้:

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

8

alertและnotify-sendดูเหมือนจะเป็นสิ่งเดียวกัน ฉันใช้notify-sendสำหรับข้อความที่ไม่ใช่อินพุตเนื่องจากมันไม่ได้ขโมยโฟกัสและฉันไม่สามารถหาวิธีหยุด zenity ฯลฯ จากการทำสิ่งนี้ได้

เช่น

# 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

นอกจากนี้ยังมีรุ่น dialog KDE ถูกใช้โดย slackware ดังนั้นจึงอาจไม่สามารถใช้งานได้ทันทีในการกระจายอื่น ๆkdialogdialog


6

หากไม่มีสิ่งใดเป็นปัจจุบัน คุณสามารถเปิดตัว xterm และ echo ได้เช่นนี้

 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

วิธีการเกี่ยวกับอูบุนตูของการแจ้งเตือน สามารถใช้งานได้หลังจากการดำเนินการใด ๆ เพื่อแจ้งเตือนให้เสร็จสิ้นและยังแสดงไอคอนกากบาทสีแดงหากผู้ดำเนินการเสร็จสิ้นพร้อมข้อผิดพลาด

ls -la; alert

3

Zenityเป็นเครื่องมือที่แน่นอนที่ฉันคิดว่าคุณกำลังมองหา

หรือ

zenity --help

0

Kdialog และกล่องโต้ตอบนั้นดี แต่ฉันแนะนำ Zenity รวดเร็วง่ายและดู xmessage หรือข้อความโต้ตอบได้ดียิ่งขึ้น


0

ตัวอย่างสคริปต์ทุบตีสำหรับใช้ Gambas GTK / การควบคุม QT (วัตถุ GUI): Gambas IDE สามารถใช้ในการออกแบบ GUI ที่มีขนาดใหญ่และทำหน้าที่เป็นเซิร์ฟเวอร์ GUI ตัวอย่าง expplications สามารถดาวน์โหลดได้จาก Gambas App store
https://gambas.one/gambasfarm/?id=823&action=search

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.