xlax is a small utility that accepts keyboard input from the user and sends it to multiple X11 windows.
In a typical usage, a user might need to check a few things and run a number of commands on five different machines. After setting up all the windows to work with xlax (see below), and with send strings set to hostnames, the user will type "ssh " and then click "Send String", and then type return, and the user will simultaneously log into those five different machines. They can then type the commands once and see them run on all machines at the same time.
Setting up xlax and windows
In the simplest usage, you start xlax, and then click on the "Add windows" button. You then click on windows that you want xlax to talk to, and click back on the xlax window again when you are done adding. The added windows must have "Allow SendEvents" turned on, or xlax won't be able to talk to them. To set the send string, click on the box to the right of the window name, and enter the string in the popup box. Note that control characters including backspace and carriage return are entered as literal characters so if you make a mistake you have to clear and start over.
This method of setup can be tedious, and xlax also allows for automated setup. If you press the "Find xlax:" button, or if you start xlax with -find, it will search for windows with a Name hint that starts with "xlax:" and add them automatically. Additionally, any text after the "xlax:" will be used as the send string. The "xlax:" prefix can be changed to some other string with the "-prefix" option. For xterms, the name hint is set with the "-name" option. Here's an example:
example% xterm -xrm 'XTerm*allowSendEvents: true' -name xlax:string1 &
example% xterm -xrm 'XTerm*allowSendEvents: true' -name xlax:string2 &
example% xterm -xrm 'XTerm*allowSendEvents: true' -name xlax:string3 &
example% xlax -find &
While all this is an improvement, it is still tedious to prepare all of the windows with the proper Name hint. The real use for this method is to make window setup script-able, for cases where you repeatedly need the same layout of windows. One such script (mkxlax) is included in this package, and is described below.
mkxlax will create a number of xterms with the send strings preset. The simplest form of using mkxlax is to simply provide a list of send strings:
mkxlax host1 host2 host3 host4 host5
This command will create 5 xterms, with sendEvents enabled, and with the name hints set to the arguments, e.g. the first window will have a name hint of "mkxlax:host1". mkxlax then starts up "xlax -find -prefix mkxlax", to find all the windows that have been set up.
mkxlax also has options for controlling the positioning of the windows, allowing them to be tiled or stacked, overlapped or not. It also has options for using different xlax prefixes (with "-group") so that you can run multiple mkxlax commands at the same time without interfering with each other.
All of these options can be stored in a configuration file that lets you have simple presets that you can bring up as needed. This can include the list of send strings, but it doesn't have to. The presets can be overridden on the command line. You can then have a quick command like "mkxlax -layout macservers" to bring up all of your mac servers in a particular arrangement on the screen, or run a command "mkxlax -layout stack_vertical host1 host2 host3" to layout an arbitrary set of windows in an arrangement that you've predefined.
mkxlax is further described in a man page included in the distribution.
xlax relies on the X11 sendEvents being allowed in order to work. If your X server is not properly secured, anyone with a connection to your display could send commands to these windows. Of course, if your X server is not secured they could also do the same thing by other means, so in this author's opinion, xlax doesn't add any significant additional security risk.
It does of course multiply your ability to shoot yourself in the foot.
What's New in This Release:
· Spaces and punctuation were not correctly translated in send strings or in pasting current selection. This is now fixed, in a way that should be fully portable.