How can I create a message box from the command line, either GUI message boxes or message boxes shown inside the terminal?

It would also be interesting to be able to get a simple input back from the user, for example, an input given with radio buttons (yes/no, OK, etc).


4 Answers 4


For a standard "box around a message", use boxes:

echo 'This is a test' | boxes

boxes will look like this (First one. Second one is a custom like cowsay):

Screenshot of an asterix box and an ASCII-art dog holding a sign of text

If you mean an alert box, use notify-send:

notify-send 'title' 'message'

notify-send looks like this:

Pop-up message reading "Hello Ashframe..."

You also can use zenity for a popup window:

zenity --error --text="An error occurred\!" --title="Warning\!"

Zenity is more graphical and has more options, like having the window appear as a question, using:

zenity --question --text="Do you wish to continue/?"

or even progress bars, using:

find /usr | zenity --progress --pulsate --auto-close --auto-kill --text="Working..."

zenity looks like this:

error, question, info, and warning dialog boxes with buttons

Or use dialog, for a command-line only message box:

dialog --checklist "Choose OS:" 15 40 5 \
1 Linux off \
2 Solaris on \
3 'HP UX' off \
4 AIX off

dialog looks like this:

dialog TUI with 4 options

Another option is whiptail:

whiptail --title "Example Dialog" --msgbox "This is an example of a message box. You must hit OK to continue." 8 78

whiptail looks like this:

whiptail pop-up box with two text buttons

And if you are truly crazy, use toilet:

toilet -F border -F gay "CRAZY"

toilet looks like this:

colorful text box reading "CRAZY"



This is the granddaddy of GUI alerts:

xmessage -center "Hello, World!"

Pure retro goodness.

I also bet that it should be widely available on X11 systems.

SO thread: How to show a GUI message box from a bash script in linux? | Stack Overflow

Tested in Ubuntu 18.04.

  • 3
    xmessage is even installed on Ubuntu Server by default. So I can use ssh -Y <host> to log into the machine while forwarding x connections and then run some-command; xmessage "some-command is done" to pop up a notification on my desktop when the long running command is finished. May 3, 2019 at 20:30
  • 1
    Cool command. To auto-clear the message after a few seconds: xmessage -timeout 10 "Goodbye in 10s!".
    – AlainD
    Sep 11, 2019 at 15:49
  • 2
    TINY on a 4k monitor. Feb 20, 2020 at 21:15
  • 1
    This will do wonders for my long-running rsync commands over ssh. Nov 19, 2020 at 20:10
  • 1
    Xmessage is a very underestimated little program. You can also use buttons that return different exit status. E.g.: xmessage -button OK:0,Cancel:101 Hello; echo $? returns 0 (success) if user presses OK and 101 if he presses cancel.
    – Quasímodo
    Nov 11, 2021 at 18:45

And then just because @polym's completely over the top answer missed the classic messaging:

write <username> [<terminal>] - send a message to another user. Either interactively or as part of a pipe with echo "message" | write username


And the complement to write, wall to send a message to all users



If you are willing to pipe the text to a Python wrapper, you can use terminaltables:

pip3 install colorclass
pip3 install terminaltables

Then in the GitHub Repo, you can use one of the examples to write a python wrapper.

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.