KeyShowX is a simple, yet powerful, tool for making multi-screen presentations, shows and digital signage. It is a companion product for Apple Keynote and Microsoft PowerPoint. Consider it as a universal, flexible and scriptable remote control unit for simultaneous execution and synchronisation of multiple presentations running on different computers. In addition you can also control Apple DVD Player and QuickTime Player.
KeyShowX consists of two different applications: Controller and Client. Controller application is your command center and remote control unit. You should launch Client application on all Macs where you are planning to run the actual Keynote or PowerPoint slideshows. There are no limitations on how many remote presentations you can control at the same time – it can be even several hundreds. From the Controller application you can command remote Macs to start or close Keynote or PowerPoint applications, load presentations, advance slideshows, jump between slides and so on. Controller application sends commands to all Client computers simultaneously or individually, based on your needs.
Both KeyShowX applications (Controller and Client) are self-signed. In order to avoid your macOS security settings blocking KeyShowX, you should right-click application icon and select Open menu:
Confirm in security dialog that you allow opening KeyShowX:
You should copy KeyShowX Client application to all Macs, which you intend to control.
There are only few configurable options in the Client application:
Screen ID: Consider it as an identification number for your screen. It is very useful, if you are planning to send commands to individual screens from the Controller application. It is recommended to assign a unique number for each individual presentation machine. It gives greater flexibility if you are planning complex presentation queues.
Listen on UDP Port: KeyShowX uses UDP for communications. Both Client and Controller applications must use the same port number, by default 7777. However, it is freely reconfigurable. If you are using firewall on your Mac, remember to allow UDP communications on the selected port. Usually, when the Client application receives its first command, Mac OS X should automatically ask the user whether communication on the specific port should be allowed.
Media folder: Allows you to specify the default folder on the client computer for presentations, video files and DVD images. When KeyShowX Client receives a command to open a presentation, first, it checks this folder for the received file name. This is a convenience setting that allows the Controlling Mac to only specify the needed file name, without the full path.
Section Remote KeyShowX Clients
UDP Port: KeyShowX uses UDP for communications. Both Client and Controller applications must use the same port number, which is by default 7777. However, it is freely reconfigurable. If you are using firewall on your Mac, remember to allow UDP communications on the selected port.
Broadcast: Use this option if all KeyShowX Clients are located in the same subnet with the Controller application. All controlling messages will be broadcasted to the network and delivered to Clients at the same time. It’s the best option and requires zero configurations.
Weak network: Remember, the best option is to use a wired network for reliability. However, if you expect quality issues with the connection, especially when using Wi-Fi, try this option. KeyShowX will use redundant extra control messages.
IP List: If your show setup requires using computers located in different networks, you must specify IP addresses of the KeyShowX Clients. This button brings up a dialog where you can specify the list of addresses. You can use a combination of the Broadcast option along with such a list of individual IP addresses.
Buttons Presentations, QuickTime and DVD Player make visible windows of the corresponding controllers. Use them for the direct control of the slideshows or media playback.
Keyboard: Enables direct reconfigurable keyboard control. With this option enabled, you can assign any KeyShowX command to any keystroke. It is very useful if you have a wireless remote control unit, which issues unusual keystrokes. Another potential scenario is KeyShowX automation with AppleScript. It is possible to send keystrokes from another application and execute predefined KeyShowX commands. Use the Edit button to create a list of custom commands and associate them with the dedicated keystrokes. You can read more in the Key Action Editor chapter. Remember, in order to use the keyboard control, KeyShowX must be the active foreground application in Mac OS X. When KeyShowX receives a keystroke, it displays the key code and it’s visual representation in Last key. It is important to use those key codes when making a list of custom commands.
Section Show Commands and Scripting
KeyShowX Controller application communicates with Clients by sending plain text commands over the UDP. Every KeyShowX controlling action has an associated command, whether it’s advancing to the next slide of a presentation or launching the QuickTime player. Every command can be targeted to all or dedicated Clients. Such system makes it very easy to build scripting capabilities around it. You can create a sequence of pre-defined commands to control an entire multiscreen show.
Show Console: Brings up a window with a history of the last 100 commands, which were sent by the Controller application. Helps you to understand and explore KeyShowX commands. It is also possible to select a single command from the history list and execute it again.
New, Open, History: Allows you to create or open a previously saved KeyShowX show script. It is a very flexible and powerful feature. You can bundle together several commands and execute them one by one conveniently from a single scripting window, instead of using multiple windows with controllers for dedicated applications. For example, say, you would like to open ten different presentation files on ten remote show computers. Of course, you could use dedicated Presentation Controller window, type in the file names and open them one by one, every time specifying a different target screen. And, you would have to repeat that every time you have the same show. Or, alternatively, you could create a single script where all opening operations will be bundled together once and ready for later reuse as many times as required, without the need for retyping.
Key Actions Editor
In the Key Action Editor window you can associate keystrokes with specific KeyShowX commands. Each keystroke should start from a new line, for example:
39 0 keynote/nextslide
74 1,3 keynote/jumpto 10
The first command means: When right arrow is pressed (keycode 39), send to all screens (0) command to advance Keynote to the next slides. Second command means: force Keynote jump to slide 10 on screens 1 and 3 when the key “J” is pressed (keycode 74). There are no limitations on how many keystrokes you can pre-program.
Full list of KeyShowX commands and their syntax is available at the end of this document.
There is one very powerful feature that allows greater show control automation – scripts. You can create a script consisting of many KeyShowX commands, save it as file and then, execute it with single keystroke. Scripts are simple plain text files and it is possible to use any of your preferred text editors to create or edit them. However, it is recommended to use the embedded Show Script Editor. Use Show Commands and Scripting section of main KeyShowX window to create new or open existing scripts with the editor. KeyShowX script editor gives you the possibility to debug and execute any parts or individual commands of the script, on the fly.
Once you have a functional script saved as a file, you can associate it with a keystroke. It is done in a similar manner as associating individual commands, except using the special keyword script, for example:
75 script /users/show/concert_january.kshx
meaning that script
concert_january.kshx located in folder
/users/show will be started once key “K” (keycode 75) is pressed.
All commands from the script are going to be executed sequentially with minimal delay (~ 10 ms) between each command. It is possible to have custom delays for the commands. It is done with special
wait command described at the end of this document. Please note that
loop command is ignored when the script is executed from a keyboard shortcut.
With the Presentation Controller you can control Keynote or PowerPoint presentations.
Most of the presentation controls are self explanatory, like Next, Previous, Start Show etc. Following elements with an additional explanation might be useful for the users who are not familiar with KeyShowX.
Control Screens: You can choose which screen will receive control messages. From the drop down list you can select All, individual screens from 1 to 10, or Custom. This option requires that KeyShowX Clients will have specified unique Screen IDs. There are no limitations, how many screens you can control. Numbers from 1 to 10 in the drop down list are just for quick convenience. Use Custom option where you can specify single or multiple screens (KeyShowX Clients). If you are planning to use multiple screen IDs, separate them with commas, without spaces.
Open presentation file remotely: In certain cases you can open presentations manually on an every remote Mac. However, it is much more convenient to do it programmatically. With this option, you can specify the full path to a presentation on a remote Mac. Remember, this is the path, which is local for the remote KeyShowX Client. If you have specified Media Folder on remote KeyShowX client, then, you can use just presentation file names, without the path.
PowerPoint mode: By default, the Presentation Controller uses Keynote as the target. By selecting this option, you can use PowerPoint.
Keyboard control: Use this option to control the presentation from your keyboard. There are several pre-defined keyboard shortcuts:
Next Slide – Right arrow, Space, Page Down, N;
Previous Slide – Left arrow, Page Up, P;
Black Slide – B;
First Slide – Home;
Last Slide – End;
Stop Show – Esc.
Remember, you can completely customise the keyboard control (including complex scripting) from the main window even without ever opening the Presentation Controller.
QuickTime Controller allows you to control the QuickTime Player.
Options for selecting remote screens and opening media files are the same as with Presentation Controller.
Name of the window for all commands: this option is specific to how QuickTime Player works – you always must specify QuickTime Player window name that will receive control messages. In most cases, name of the window is the same with file name. However, in some media files, window name will be picked app from files meta-data. In this case, you will have to type window name manually.
DVD Player Controller
You can control the Apple DVD Player with any DVD media or VIDEO_TS folder.
Apple DVD Player remembers the last used media, so in many cases you don’t have to explicitly open a VIDEO_TS folder.
DVD Player Controller replicates full controls for DVD menu navigation. In addition, you can jump to a specific Title, Chapter or Time (must be in seconds from the beginning of the title).
Show Script Editor
Scripting commands is the most powerful way to control your shows with KeyShowX. Absolutely every button in controllers has an associated scripting command.
The full list of commands is available at the end of this document. Command syntax is very simple:
<screen ID> <command> <argument>
where screen ID can be 0 for targeting all screens or a comma separated number list (without spaces). For example:
0 keynote/open /Users/slides/Show.key
opens file /Users/slides/Show.key on all remote Macs with Keynote.
1,3,5 keynote/jumpto 5
Jumps to slide 5 on screens 1, 3 and 5.
You can edit the script just like simple text file in the Edit tab. In the Control mode you should double click on a command and then use the Run Step button for step-by-step execution of the script. For the automatic full script execution use the Run All button. Please note, in the automatic execution all commands are executed sequentially with minimal delay (~ 10 ms). For controlling delay between commands use special command wait followed by amount of milliseconds. For example, consider the following sequence of commands:
there will be three seconds delay (3000 ms) between advancing to the next slide.
Another special command is
loop for an unconditional jump to the beginning of the script.
|wait <milliseconds>||Stops execution of the script for specified amount of milliseconds|
|loop||Unconditional jump to the beginning of script|
|keynote/open||Open Keynote presentation|
|keynote/startshowreset||Start presentation from the beginning|
|keynote/close||Close all open presentations|
|keynote/firstslide||Jump to first slide|
|keynote/lastslide||Jump to last slide|
|keynote/blackslide||Show black slide|
|keynote/jumpto <slide number>||Jump to specified slide number|
|keynote/bringtofront||Bring Keynote as front most application|
|powerpoint/open||Open PowerPoint presentation|
|powerpoint/startshowreset||Start presentation from the beginning|
|powerpoint/close||Close all open presentations|
|powerpoint/firstslide||Jump to first slide|
|powerpoint/lastslide||Jump to last slide|
|powerpoint/blackslide||Show black slide|
|powerpoint/jumpto <slide number>||Jump to specified slide number|
|powerpoint/bringtofront||Bring PowerPoint as front-most application|
|Apple DVD Player commands|
|dvd/open <VIDEO_TS folder>||Open VIDEO_TS folder and go to full screen mode|
|dvd/quit||Quit DVD Player|
|dvd/start||Start DVD Player and go to full screen mode|
|dvd/tofront||Bring Apple DVD Player as front-most application|
|dvd/menu||Jump to DVD main menu|
|dvd/title||Jump to DVD title menu|
|dvd/left||DVD navigation left button|
|dvd/up||DVD navigation up button|
|dvd/right||DVD navigation right button|
|dvd/ok||DVD navigation Ok button|
|dvd/down||DVD navigation down button|
|dvd/begdisc||Jump to beginning of the DVD disc|
|dvd/jumptitle <number>||Jump to specified title|
|dvd/jumpchapter <number>||Jump to specified chapter|
|dvd/jumptime <seconds>||Jump to specified time (in seconds)|
|QuickTime Player commands|
|quicktime/open||Open media file with QuickTime Player|
|quicktime/quit||Quit QuickTime Player|
|quicktime/tofront||Bring QuickTime Player as front-most application|
|quicktime/rewind||Rewind media frame back|
|quicktime/fsplay||Play media full screen|
|quicktime/enablelooping||Enable media looping|
|quicktime/disablelooping||Disable media looping|