TweetFollow Us on Twitter

Checking Out Kiosk Mode Features

Volume Number: 19 (2003)
Issue Number: 12
Column Tag: Programming

Mac OS X Programming Secrets

Checking Out Kiosk Mode Features

by Scott Knaster

For about 20 years now, Apple has been telling us that modes in software are bad. It's hard to remember, especially if you're a youngster, but we used to drive software around by getting into and out of modes, restricted places that provided their own definitions for the way commands worked and actions were interpreted (kind of the way a lot of venerable UNIX text editors and command line tools work in OS X today, except this was for everybody, not just us geeks). For example, when you typed a slash into a little old spreadsheet program called VisiCalc, you went into command mode, signaling that the next character was an instruction rather than something that should appear in a cell.

But Apple in its wisdom says modes are OK in certain situations. For example, modes that emulate the real world are permitted, such as picking a type of brush in a painting program. Another kind of mode is useful when you intentionally want to limit what your users can do. This rare situation becomes reality when you consider the kiosk, a public computer that has to fend for itself when accosted by clueless newbies, hostile geeks, and keyboard-pounding toddlers.

If you're developing an application that has to run at a kiosk, Apple helps you out by providing a set of features for kiosk mode in Mac OS X. In this column, we'll take a look at how to take advantage of what OS X can do for you in kiosk mode.

Simple API

Apple put the cool new kiosk mode features into OS X 10.2, adding a little more in 10.3. You get to the features through two function calls: SetSystemUIMode and GetSystemUIMode. These calls let you effectively lock the user inside your application, preventing the hostile, curious, or ignorant from wreaking havoc. The SetSystemUIMode call is defined like this:

OSStatus SetSystemUIMode (SystemUIMode inMode,
                                        SystemUIOptions inOptions);

The inMode parameter specifies the UI mode you want, and inOptions lets you choose settings for that mode. There are five modes you can pick for your application, as shown in the following table:

System UI mode setting      Details

kUIModeNormal               The usual mode for all applications, and the mode you get if you don't 
                            make any calls to this API.
                            
kUIModeContentSuppressed    This mode prevents the system from drawing anything into the content 
                            area of the screen below the menu bar unless the user performs an action 
                            that triggers an auto-show behavior. In practice, this mode simply turns 
                            dock hiding on, which makes the dock vanish until the mouse pointer 
                            moves over it, whereupon it slides onto the screen. Note: this was 
                            broken in 10.2 and is fixed in 10.3.  
                            
kUIModeContentHidden        This mode hides the dock - technically, all system UI elements other 
                            than the menu bar - and does not show it even if the user mouses into 
                            the dock region. Note: this was also broken in 10.2 and fixed in 10.3.
                            
kUIModeAllHidden            Use this mode to hide the menu bar along with the dock, with no 
                            auto-showing feature.   
                            
kUIModeAllSuppressed        This mode was added in 10.3. Use it for hiding the dock and menu bar, 
                            but in this mode they will both auto-show if the user mouses over their 
                            content areas.  

When you call SetSystemUIMode, you also get to pass a set of options in addition to the mode you want to use. These options provide even more lock-in features for your kiosk and help you further refine the imprisonment of your rowdy user. Here's a list of the options you can choose:

System UI option                    Details

kUIOptionDisableAppleMenu           Use this option to disable all items in the Apple menu, 
                                    although despite the option's name, the appearance of the 
                                    Apple itself isn't disabled (must be a corporate logo thing). 
                                    
kUIOptionDisableProcessSwitch       This option turns off the user's ability to switch apps using 
                                    Command-Tab and Command-Shift-Tab.  
                                    
kUIOptionDisableForceQuit           If you select this option, the Force Quit item in the Apple 
                                    menu is disabled, and Command-Option-Escape doesn't do 
                                    anything. Powerful!  
                                    
kUIOptionDisableSessionTerminate    This option helps prevent the user from shutting down or 
                                    logging out. When you use it, the Restart, Shut Down, and 
                                    Log Out menu items are disabled. Also, if the user presses 
                                    the power button, the Restart/Sleep/Cancel/Shut Down alert 
                                    won't appear.  
                                    
kUIOptionAutoShowMenuBar            This option is only valid when used with kUIModeAllHidden. 
                                    Pass it to make the menu bar show itself if the user rolls 
                                    the mouse into its content region.  
                                    
kUIOptionDisableHide                This option was added in 10.3. Set it to disable the Hide item 
                                    in the application menu.  


Figure 1. You can use SetSystemUIMode to prevent users from getting access to the Force Quit and Power windows.

One of the cautions to note in using SetSystemUIMode is that the mode you set is only respected when your application is frontmost. If through magical incantation or other method the user somehow manages to bring another application to the front, the UI mode for your application is switched out along with the rest of the app.

There is a corresponding call to find out the current UI mode:

GetSystemUIMode(SystemUIMode *outMode, 
                        SystemUIOptions *outOptions);

As you can guess, calling GetSystemUIMode gets the current mode and options, in case you need to know what they are.

Depending on what your kiosk does, you might want to make the Finder go away. One good reason for this is that it prevents users from clicking on the desktop to switch out of your application. You can get rid of the Finder by sending it a kAEQuitApplication Apple event. Apple has an example to show you how to do that - it's at http://developer.apple.com/technotes/tn2002/downloads/tn2062_2.hqx .

If you just want your application to start up in one of the modified system UI modes and stay there, and you don't need to set any options, you can specify your desire in the application's property list. Just add a key named LSUIPresentationMode with type number and a value of 0, 1, 2, 3, or 4. Use 0 for normal mode, 1 for content suppressed, 2 for content hidden, 3 for all hidden, and 4 for all suppressed.

To help you view the power of the kiosk mode APIs in all their majesty, Apple provides a cool sample app, called UsingSystemUIMode, that demonstrates the various available features and tweaks. See Figure 2 for a shot of the app's screen.


Figure 2. Apple's sample application for testing kiosk mode APIs.

To get the sample app and to learn more about implementing kiosk mode in your application, see Technical Note TN2062, Guide to Creating Kiosks on Mac OS X, available at http://developer.apple.com/technotes/tn2002/tn2062.html.

No Can Do

Although the kiosk mode API is a good start toward locking up your kiosk machine, there are some things you'll want to do that you can't do yet. And just when you thought everything was perfect. Here's more information about some of those limitations:

You can't disable the eject key. If your kiosk has to run with a CD or DVD inserted, you can design the kiosk so that it's physically impossible to eject the disk.

To disable various wacky scenarios, such as taking control of the machine by booting off an external disk or booting into single-user mode by holding down Command-S, you can enable the Mac's Open Firmware password. When the Open Firmware password is enabled, the Mac will only boot from the startup disk you select in System Preferences.

You can't prevent the user from messing with the brightness keys and darkening the screen, nor can you intercept the volume keys.

One More Thing

Needless to say, locking your users in and preventing them from having basic features is not a standard design principle. In a kiosk, many of these features are necessary. In a typical app, they're practically criminal. Please use them with care, or at least a sense of humor.


Scott Knaster has been writing about Macs for as long as there have been Macs. Scott's books How To Write Macintosh Software and Macintosh Programming Secrets were required reading for Mac programmers for more than a decade. Scott wrote developer books for General Magic and worked on Mac software for Microsoft. Scott's books have been translated into Japanese and Pascal. Scott has every issue of Mad magazine, which explains a lot.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Sound Studio 4.8.11 - Robust audio recor...
Sound Studio lets you easily record and professionally edit audio on your Mac. Easily rip vinyls and digitize cassette tapes, or record lectures and voice memos. Prepare for live shows with live... Read more
BetterTouchTool 2.291 - Customize Multi-...
BetterTouchTool adds many new, fully customizable gestures to the Magic Mouse, Multi-Touch MacBook trackpad, and Magic Trackpad. These gestures are customizable: Magic Mouse: Pinch in / out (zoom... Read more
Carbon Copy Cloner 4.1.18 - Easy-to-use...
Carbon Copy Cloner backups are better than ordinary backups. Suppose the unthinkable happens while you're under deadline to finish a project: your Mac is unresponsive and all you hear is an ominous,... Read more
Hopper Disassembler 4.2.14- - Binary dis...
Hopper Disassembler is a binary disassembler, decompiler, and debugger for 32- and 64-bit executables. It will let you disassemble any binary you want, and provide you all the information about its... Read more
VOX 2.8.30 - Music player that supports...
VOX just sounds better! The beauty is in its simplicity, yet behind the minimal exterior lies a powerful music player with a ton of features and support for all audio formats you should ever need.... Read more
Default Folder X 5.1.6b3 - Enhances Open...
Default Folder X attaches a toolbar to the right side of the Open and Save dialogs in any OS X-native application. The toolbar gives you fast access to various folders and commands. You just click on... Read more
CleanMyMac 3.8.6 - $39.95
CleanMyMac makes space for the things you love. Sporting a range of ingenious new features, CleanMyMac lets you safely and intelligently scan and clean your entire system, delete large, unused files... Read more
Postbox 5.0.17 - Powerful and flexible e...
Postbox is a new email application that helps you organize your work life and get stuff done. It has all the elegance and simplicity of Apple Mail, but with more power and flexibility to manage even... Read more
Amazon Chime 4.6.5852 - Amazon-based com...
Amazon Chime is a communications service that transforms online meetings with a secure, easy-to-use application that you can trust. Amazon Chime works seamlessly across your devices so that you can... Read more
coconutBattery 3.6.3 - Displays info abo...
With coconutBattery you're always aware of your current battery health. It shows you live information about your battery such as how often it was charged and how is the current maximum capacity in... Read more

The best 2v2 card combos in Clash Royale
2v2 is making it's grand return toClash Royalequite soon. 2v2 has quickly become one of the game's most popular gameplay modes, though they still have yet to make it a permanent fixture in the game. 2v2 is exciting and adds some new flavor to... | Read more »
The best games we played this week - Aug...
Another busy week has come to a close. We played a lot of excellent games this week and now it's time to look back and reflect on some our favorites. Here are our picks for the week of August 18. [Read more] | Read more »
War Wings beginner's guide - how to...
War Wings is the newest project from well-established game maker Miniclip. It's a World War II aerial dogfighting game with loads of different airplane models to unlock and battle. The game offers plenty of single player and multiplayer action. We... | Read more »
How to win every 2v2 battle in Clash Roy...
2v2 is coming back to Clash Royale in a big way. Although it's only been available for temporary periods of time, 2v2 has seen a hugely positive fan response, with players clamoring for more team-based gameplay. Soon we'll get yet another taste of... | Read more »
Roll to Win with Game of Dice’s new upda...
Joycity’s hit Game of Dice gets a big new update this week, introducing new maps, mechanics, and even costumes. The update sets players loose on an exciting new map, The Cursed Tower, that allows folks to use special Runes mid-match. If you feel... | Read more »
Bottom of the 9th (Games)
Bottom of the 9th 1.0.1 Device: iOS iPhone Category: Games Price: $4.99, Version: 1.0.1 (iTunes) Description: Play the most exciting moment of baseball in this fast-paced dice and card game! | Read more »
The best apps for viewing the solar ecli...
If you somehow missed the news, many parts of the United States will be witness to a total solar eclipse on August 21 for the first time in over 90 years. It'll be possible to see the eclipse in at least some capacity throughout the continental U... | Read more »
The 5 best mobile survival games
Games like ARK: Survival Evolved and Conan Exiles have taken the world of gaming by storm. The market is now flooded with hardcore survival games that send players off into the game's world with nothing but maybe the clothes on their back. Never... | Read more »
Portal Walk (Games)
Portal Walk 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Portal Walk is adventure and relaxing platform game about Eugene. Eugene stuck between worlds and trying to find way back home.... | Read more »
Technobabylon (Games)
Technobabylon 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: City of Newton, 2087. Genetic engineering is the norm, the addictive Trance has replaced almost any need for human interaction,... | Read more »

Price Scanner via MacPrices.net

Weekend sale: 13-inch MacBook Pros for up to...
Amazon has new 2017 13″ MacBook Pros on sale today for up to $200 off MSRP, each including free shipping: – 13″ 3.1GHz/256GB Space Gray MacBook Pro (MPXV2LL/A): $1599.99 $200 off MSRP – 13″ 3.1GHz/... Read more
Back To School With The Edge Desk All-in-one...
Back to school is just around the corner, and the ergonomically correct Edge Desk all-in-one portable kneeling desk is ideal for students living in dorms and small apartments, Edge Desk features:... Read more
Norton Core Secure Wi-Fi Router Now Available...
First introduced at the 2017 Consumer Electronics Show (CES), Norton Core, a secure, high-performance Wi-Fi router, fundamentally changed the concept of Wi-Fi routers by making security the primary... Read more
ViewSonic Adds New 27-inch 4K UHD Monitor to...
ViewSonic Corp. has introduced the VP2785-4K, a 27-inch 4K UHD (3840×2160) monitor that delivers precise and consistent color representation and performance to ensure incredible image quality. Built... Read more
Apple now offering Certified Refurbished 2017...
Apple is now offering Certified Refurbished 2017 27″ iMacs for up to $350 off original MSRP. Apple’s one-year warranty is standard, and shipping is free. The following models are available: – 27″ 3.... Read more
13-inch 2.3GHz MacBook Pros on sale for $100...
Amazon has the new 2017 13″ 2.3GHz MacBook Pros on sale today for $100 off MSRP, each including free shipping: – 13″ 2.3GHz/128GB Space Gray MacBook Pro (MPXQ2LL/A): $1199.99 $100 off MSRP – 13″ 2.... Read more
Clearance 2016 13-inch MacBook Airs available...
B&H Photo has clearance 2016 13″ MacBook Airs available for up to $200 off original MSRP. Shipping is free, and B&H charges NY & NJ sales tax only: – 13″ 1.6GHz/128GB MacBook Air (MMGF2LL... Read more
Clearance 21-inch and 27-inch iMacs available...
B&H Photo has clearance 21″ and 27″ Apple iMacs available for up to $500 off original MSRP, each including free shipping plus NY & NJ sales tax only: – 27″ 3.3GHz iMac 5K: $1799 $500 off... Read more
New iOS 11 Productivity Features Welcome But...
The iOS community is in late summer holding mode awaiting the September arrival of the iPhone 8 and iOS 11. iOS 11 public betas have been available for months — number six was released this week —... Read more
Samsung Electronics Launches New Portable SSD...
Samsung Electronics America, Inc. has announced the launch of Samsung Portable SSD T5 – its newest portable solid state drive (PSSD) that raises the bar for the performance of external memory... Read more

Jobs Board

*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Development Operations and Site Reliability E...
Development Operations and Site Reliability Engineer, Apple Payment Gateway Job Number: 57572631 Santa Clara Valley, California, United States Posted: Jul. 27, 2017 Read more
Frameworks Engineering Manager, *Apple* Wat...
Frameworks Engineering Manager, Apple Watch Job Number: 41632321 Santa Clara Valley, California, United States Posted: Jun. 15, 2017 Weekly Hours: 40.00 Job Summary Read more
Development Operations and Site Reliability E...
Development Operations and Site Reliability Engineer, Apple Payment Gateway Job Number: 57572631 Santa Clara Valley, California, United States Posted: Jul. 27, 2017 Read more
Frameworks Engineering Manager, *Apple* Wat...
Frameworks Engineering Manager, Apple Watch Job Number: 41632321 Santa Clara Valley, California, United States Posted: Jun. 15, 2017 Weekly Hours: 40.00 Job Summary Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.