LinuxでbashスクリプトからGUIメッセージボックスを表示する方法は?


151

Ubuntu linuxでいくつかの小さなbashスクリプトを書いています。入力を入力したり出力を表示したりするために端末ウィンドウを必要とせずに、GUIからそれらを実行できるようにしたいと考えています。

これまでのところ必要な唯一の入力はsudoのパスワードです-そしてgksudoはそれをうまく処理します。しかし、メッセージボックスを表示する簡単な方法はまだ見つかりません。ある種の「gkmessage」コマンドを利用できますか?私はデフォルトのUbuntuインストールにあるものを好みますが、必要に応じて新しいパッケージをインストールしてもかまいません。


回答:


143

Zenityがあなたのやりたいことをすると信じています。コマンドラインからGTKダイアログを表示するために特別に設計されており、Ubuntuパッケージとして利用できます


4
zenity --helpあまり役に立たない。これを便利にするには、--text=My text here何かを表示するように設定する必要があります...
Stephen

10
例えばzenity --info --text="Calculation complete"
クレイグ・マックイーン

3
@Stephen、奇妙な理由で正しいコマンドはzenity --help-allです。
GKFX 2014

3
ヘルプメッセージを印刷するためにディスプレイを開く必要があるプログラムが好きではありません...
thoni56

このメソッドを使用して.xinitrcxorgサーバーの起動中に警告やエラーを表示します。そうでない場合、エラーは透過的です。KDEがまだ起動しておらず、GTKライブラリの方が軽量であるため、私もこれzenityを好みkdialogます。
cmevoli 2016

152

Ubuntuを使用している場合、多くのディストリビューションのnotify-sendコマンドは、右上隅にこれらの素敵な壊れやすい通知の1つをスローします。そのようです:

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

綺麗な!


2
これはFedoraでも動作します。どのLinuxディストリビューションでもこれができると私は確信しています。
kmatheny 2013

4
Raspbian GNU / Linux 7では動作しません。インストールする必要のあるパッケージはありますか?
カールバービエスト

1
debianリポジトリ内:apt-cache search notify-osd @carlverbiest
サンタ

2
Ubuntu 14.04では、「notify-send -t 0 'hi there!'」のようにタイムアウト0でnotify-sendを呼び出すと、有効期限のないポップアップダイアログが表示されます。
vancan1ty 2016年

Debian 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とともに配布されているため)。それが何を意味するのかを知るのに十分長い間LinuxまたはUnixを使用してきた人のために、Xリソースを通じてカスタマイズ可能です(.Xdefaultsです誰でも?)。

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

kdialog

(未検証)

PPAで

YAD:ステロイドのゼニティ[シェルスクリプトからグラフィックダイアログを表示]〜Web 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

自由に編集してください。



@ThorSummoner先端をありがとう。興味のある読者にとっての違いは、whiptail --infobox(代替画面をサポートする端末では正しく機能しない)ユーザー入力を待たずに戻るのに対し、whiptail --msgbox(機能する)終了する前にユーザーの確認を待つという点です。
ステフェイン・グーリッホン

私は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使ってそれらもチェックアウトすることをお勧めします。1つの例は、グラフィカルカレンダーから日付を選択できる--calendarオプションです。

my_date=$(zenity --calendar)

これは、ユーザーがクリックしたものに基づいて、適切にフォーマットされた日付を提供します。

echo ${my_date}

与える:

2009年8月5日

スライダーセレクター、エラー、リストなどのオプションもあります。

お役に立てれば。


私が見ることができるzentityルックスがクール。しかし、それはUbuntu 12.04の一部ではないので、gxmessage代わりに使用しました。
PeterV.Mørch、2014


8

ここにあなたが望むことをする小さなTclスクリプトがあります。UbuntuにはWishインタープリターがデフォルトでインストールされています。

#!/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"`

7

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バージョンもありkdialogます。 dialogslackwareで使用されているため、他のディストリビューションではすぐに使用できない場合があります。


5

他に何も存在しない場合。次のように、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

どのようにUbuntuのについての警告。操作が完了したことを通知したり、操作にエラーがあった場合は赤い十字アイコンを表示したりするために操作後に使用できます

ls -la; alert

3

Zenityは、まさにあなたが探していると思うツールです。

または

zenity --help

0

Kdialogとdialogはどちらも良いですが、Zenityをお勧めします。xmessageまたはダイアログの見栄えが良く、簡単で、はるかに優れています。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.