Linux의 bash 스크립트에서 GUI 메시지 상자를 표시하는 방법은 무엇입니까?


152

우분투 리눅스에서 작은 bash 스크립트를 작성하고 있습니다. 입력을 입력하거나 출력을 볼 수있는 터미널 창이 필요없이 GUI에서 실행할 수 있기를 원합니다.

지금까지 필요한 유일한 입력은 sudo의 비밀번호이며 gksudo는이를 잘 처리합니다. 그러나 아직 메시지 상자를 표시하는 쉬운 방법을 찾지 못했습니다. 사용 가능한 'gkmessage'명령이 있습니까? 기본 우분투 설치에 존재하는 것을 선호하지만 필요한 경우 새 패키지를 설치하는 것은 중요하지 않습니다.


답변:


143

나는 Zenity 가 당신이 원하는 것을 할 것이라고 믿습니다 . 커맨드 라인에서 GTK 대화 상자를 표시하도록 특별히 설계되었으며 Ubuntu 패키지 로 사용할 수 있습니다 .


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이상을 kdialogKDE는 아직 시작되지 않았고 GTK libs와 더 가볍고 때문이다.
cmevoli

153

당신이 사용하는 경우 우분투에게 많은 배포판을 notify-send명령은 오른쪽 상단 모서리에있는 그 좋은 부패하기 쉬운 통지 중 하나를 던질 것이다. 이렇게 :

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

아름다운!


2
이것은 Fedora에서도 작동합니다. 모든 Linux 배포판 에서이 작업을 수행 할 수 있다고 확신합니다.
kmatheny

4
Raspbian GNU / Linux 7에서 작동하지 않습니다. 설치해야 할 패키지가 있습니까?
carl verbiest

1
데비안 repos에서 : apt-cache 검색 notify-osd @carlverbiest
santa

2
우분투 14.04에서 적어도 "notify-send -t 0 'hi there!'"와 같이 시간 초과 0으로 notify-send를 호출하면 만료되지 않는 팝업 대화 상자가 나타납니다.
vancan1ty

데비안 Jessie에서 libnotify-bin패키지는 notify-send바이너리를 포함합니다 . Gnome3는 필요하지 않은 것 notify-osd같지만, 다른 데스크탑 환경에 추가로 필요할 수 있습니다.libnotify-bin
Jasen

78

모두가 선량함을 언급하지만 다른 많은 사람들이있는 것 같습니다. 혼란 스럽지만 흥미로운 목록은 http://alternativeto.net/software/zenity/에 있습니다.

먼저, 텍스트 서식 마크 업, 창 제목, 단추 레이블이 포함 된 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 : 스테로이드 온전함 [쉘 스크립트에서 그래픽 대화 상자 표시] ~ 웹 Upd8 : Ubuntu / 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

자유롭게 편집하십시오.



팁을 주셔서 감사합니다. 관심있는 독자의 경우 차이점은 whiptail --infobox(대체 화면을 지원하는 터미널에서 제대로 작동하지 않음) 사용자 입력을 기다리지 않고 반환 whiptail --msgbox되는 반면 작동하는 경우 종료하기 전에 사용자 확인을 기다립니다.
Stéphane Gourichon

나는 msgbox에 만족하지 못했던 것을 기억합니다. 당시의 목적을 위해 로그 또는 이와 비슷한 결과를 볼 수 있어야한다고 생각합니다.
ThorSummoner

많은 옵션! 아주 좋은 예
artu-hnrq

49

zenity의 응용 프로그램이 나타납니다 당신이 찾고있는 무엇을 할 수 있습니다.

zenity 에서 입력을 받으려면 변수를 지정하고 zenity --entry 출력을 저장하십시오. 다음과 같이 보입니다 :

my_variable=$(zenity --entry)

my_variable 의 값을 보면 zenity pop-up entry 대화 상자에 입력 된 값이됩니다.

사용자 (또는 사용자)가 대화 상자에 입력해야하는 내용에 대한 프롬프트를 표시 하려면 원하는 레이블이 있는 --text 스위치를 추가하십시오 . 다음과 같이 보입니다 :

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

Zenity에는 특정 작업을위한 다른 유용한 옵션이 많이 있으므로 zenity --help를 사용 하여 해당 옵션을 확인할 수도 있습니다 . 그래픽 달력에서 날짜를 선택할 수 있는 --calendar 옵션이 그 예입니다 .

my_date=$(zenity --calendar)

사용자가 클릭 한 내용을 기반으로 멋진 형식의 날짜를 제공합니다.

echo ${my_date}

제공합니다 :

2009 년 8 월 5 일

슬라이더 선택기, 오류, 목록 등에 대한 옵션도 있습니다.

도움이 되었기를 바랍니다.


내가 볼 수있는 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

alertnotify-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

이 또한 dialogKDE의 버전과 kdialog. dialog슬랙웨어가 사용하므로 다른 배포판에서는 즉시 사용하지 못할 수 있습니다.


6

다른 것이 없다면 xterm을 시작하고 다음과 같이 반향 할 수 있습니다.

 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 또는 대화 상자를 빠르고 쉽고 훨씬 더 잘 보입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.