Desktop/Whiteboards/HardwareHandling

Hardware Handling
This page is an attempt to write down expected behaviors of the desktop wrt. to common hardware. Having this specified at some level of detail will help with both QA and development. Note that we describe the expected default behavior here. In many cases, it is possible to configure the system to behave differently.

Keyboard

 * Multiple keyboards should all work individually and not step on each other.
 * Two different language keyboards may need specific testing
 * a regular keyboard and a separate keypad may also need specific testing
 * All standard keyboard keys should behave as labelled.
 * This should work with all keyboard layouts
 * Media keys: play/pause, stop, forward, back
 * These should trigger the corresponding action in the currently open media player (rhythmbox or totem). If more than one media player is open, control goes to the one that is currently focused. If no media player has the focus, control goes to the one that most recently had the focus.
 * expected X keysyms: XF86AudioPlay, XF86AudioStop, XF86AudioPrev, XF86AudioNext
 * Volume Keys: Volume Up, Volume Down, Mute
 * These should trigger the corresponding action in the currently open media player (rhythmbox or totem). If more than one media player is open, control goes to the one that is currently focused. If no media player has the focus, control goes to the one that most recently had the focus.
 * Expected X keysyms: [Unknown]
 * Power mgmt. keys: suspend, hibernate, power
 * The suspend button should suspend the laptop
 * The hibernate button should hibernate the laptop
 * The power button should bring up a shutdown dialog. When the laptop is suspended, pressing the power button should resume it.
 * These actions are controlled by GConf keys in /apps/gnome-power-manager/buttons
 * expected X keysyms: XF86Sleep, XF86Suspend, XF86Hibernate
 * Brightness up/down keys
 * should bring up an on-screen display and control the brightness
 * expected X keysyms XF86MonBrightnessUp, XF86MonBrightnessDown
 * Display key (commonly Fn-F7)
 * Should cycle through display configurations (only interesting with multiple displays)
 * expected X keysym: XF86Display
 * Lock screen key (Fn-F2)
 * should lock the screen (same as the default keybinding for Control-Alt-L)
 * expected X keysym: XF86ScreenSaver
 * forward/back keys
 * should do forward/back in web browsers
 * expected X keysym: XF86Forward, XF86Back
 * Scoll lock key should pause the scrollback of large amounts of text, and stop pausing when toggled off again.
 * num lock key
 * the num lock setting should persist across logout/login, this is controlled by the gconf key /desktop/gnome/peripherals/keyboard/remember_numlock_state, and the state is stored in /desktop/gnome/peripherals/keyboard/host- / /numlock_on
 * Caps lock key
 * should _not_ be consistent across logout/login; the light should continue to reflect the actual state of the key and adjust appropriately to a logout event. Caps lock should be turned off after a logout.
 * caps/num/scroll key lights should reflect their actual state.
 * Disable/Enable trackpoint (commonly Fn-F8)
 * There is no X keysym for this, as virtually all laptops handle this in hardware. It's not yet clear whether we can get an event to track state though, which might be nice.

Pointing devices

 * Multiple pointing devices should all work individually and not step on each other.
 * Standard buttons (right, left, scroll wheel, scroll wheel clicking) should all behave as expected.
 * Trackpoint (rubber-tipped pointing device typically found in the center of the keyboard)
 * It should appropriately affect the movement of the cursor on the screen. Some laptops don't allow the use of trackpoint/touchpad and an external mouse at the same time, though.
 * Touchpad
 * Edge scrolling (both vertical and horizontal) should affect movement of scrollbars.
 * Optionally, the touchpad can be disabled while using the keyboard. This is not turned on by default
 * The touchpad can be configured in the mouse capplet
 * Left-handedness
 * Toggling handedness of the mouse should swap left/right buttons, but not affect touchpads
 * This can be configured in the mouse capplet
 * Acceleration
 * TBD

Display

 * Resolution
 * LCDs and other fixed-format displays should default to the native resolution
 * Variable-format displays (CRTs, projectors...) that define a preferred mode, should default to that preferred mode
 * Variable-format displays that do not define a preferred mode should do... well, something sensible. Currently being designed.
 * Can be configured in the display capplet


 * Backlight
 * Should get turned off after 10 minutes of idleness. This timeout can be configured in the power management preferences.
 * Should get turned on after resume


 * 3D
 * is expected to work on some hardware:
 * ATI: Rage 128; all Radeons up to and including R500 series (X + four digits); experimental support for R600
 * Intel: All except i740 and Poulsbo
 * NVIDIA: TODO fill me in
 * Other: TODO fill me in
 * DRI2 support is required for GLX and Xv to work correctly under a compositor, and is available on TODO fill me in.
 * If hw-accelerated 3D is not available, the desktop effects capplet will refuse to turn desktop effects on
 * If the required extensions for desktop effects are not available, the desktop effects capplet will refuse to turn desktop effects on.


 * External monitors
 * When an external monitor is plugging in, it should be detected and turned on
 * Currently only supported on Intel hardware
 * When booting with multiple monitors, the default configuration is to place the monitors in a horizontal configuration (not cloning) if possible.
 * "If possible": There is a maximum width limit on most hardware; if placing all the connected monitors horizontally adjacent would exceed this limit, fall back to cloning. TODO list the limits for common hardware.
 * Display ordering should be as consistent as possible when using the same set of displays, and moving between display sets.
 * The Fn-F7 key cycles between supported configurations (need details about the configurations)
 * Potentially at least 'at work', 'at home', and 'on the go' configuration sets.
 * Need at least to not surprise people when their screen real estate changes between locations (if you reduce screen real estate, make it possible to see everything that was previously opened, but also not overlap to an absurd extent. Increased screen real estate will probably be less of a big deal).
 * Placement, rotation and resolution of monitors can be configured in the display capplet


 * TabletPCs and Tablet screens should default to the native resolution
 * TabletPCs with rotation built-in (this may be all of them!) should handle the rotation of the display and of the tablet correctly, such that the result of rotating is that both the display and digitizer (tablet) orientations are adjusted as expected and work correctly together.

Power Management

 * Closing the lid should trigger a suspend (always ?)
 * It should not do anything if closed with AC power.
 * Possibly, it should not do anything on close if there is an external monitor attached.
 * Critically low battery should trigger a shutdown (after a warning message)
 * Or a hibernate, if an option?
 * Battery monitoring
 * Status icon should display usefully accurate information about charge level and estimated battery life
 * When becoming critically low, a warning should be displayed
 * suspend/power button handling: see the keyboard section
 * brightness control
 * for brightness keys, see the keyboard section
 * when on battery, the system should lower the brightness on its own (more detail needed)
 * docking
 * TBD

Networking

 * wireless
 * when wireless networks are available, but none has been configured to be automatically connected, you should get an information that networks are available
 * When a wireless network is available that has been previously configured to be automatically connected, it should connect. It should require unlocking the passkey, if not already done this session.
 * wired
 * a wired connection should be brought up by default, when logging in
 * really? on login? I'd think on boot, myself.
 * broadband modem
 * TBD

Sound

 * The volume level should not be muted or deafening, and should also not change without volume changes performed by the user.
 * A 'system-ready' sound is played when reaching the login screen after boot
 * A login sound is played when logging in
 * Media applications like rythmbox and totem should play sound without problems
 * Websites that play music or video should play sound without problems
 * Multiple applications can play sound at the same time, and the sound capplet lets you control their relative volume
 * Headphones
 * Connecting a headphone should cause the sound from the system to go through the headphones, not the external speakers. It should be clear and crisp, and be at an appropriate volume according to the volume settings.
 * Microphone
 * Connecting a microphone should allow the microphone to be used for recording with no setting adjustments required.
 * In the case that a microphone is muted by default, if a microphone is plugged in, it should be unmuted.
 * The internal microphone should be possible to use for recording with no setting adjustments required.
 * Headsets
 * Connecting a headset, both jack-based and USB, should allow the microphone to be used for sound input with no setting adjustment required, and the sound from the system should go through the headset.
 * If a headset is plugged in, external speakers should not produce sound. The user should be able to change settings so that sound can come from external speakers, and input from a headset.

Removable media
The default behavior of the system wrt removable media can be configured in the Media tab of the File management preference dialog.


 * Audio CDs
 * inserting an audio cd should bring up a dialog that offers (among other things) to run rhythmbox
 * May also want it to offer to run software to create oggs from the CD
 * Video DVDs
 * inserting a video cd should bring up a dialog that offers to run totem
 * Data CDs
 * inserting a data cd should bring up a dialog that offers to mount the medium
 * USB storage
 * inserting a usb storage device should bring up a dialog that offers to mount the medium
 * Empty CDs
 * inserting an empty cd should bring up a dialog that offers to run a cd burning application
 * Storage devices (Firewire, USB, memory cards, etc) should be mounted, and have an option elsewhere to change this behavior.

Other Peripherals

 * Cameras
 * connecting a camera via usb should bring up a dialog that offers to run photo management or editing applications. Different behavior can be configured in the Media tab of the File management preference dialog.
 * Video cameras
 * TBD
 * Media Players
 * connecting a media player should bring up a dialog that offers to run a music player like rhythmbox. Different behavior can be configured in the Media tab of the File management preference dialog.
 * PDA
 * iPhone should _not_ have the default camera behavior if there are photos available, and should just open the software that correctly handles iPhones in Linux (rhythmbox?). It should be possible to set it so that it does also open the photo manager, if desired.
 * Palm should sync if the sync button has been pressed, and open the Palm software.
 * others? Should there be a default PDA behavior?
 * Printers
 * Should detect the printer and set it up so that it's immediately useable. If there is only one connected directly (likely), set it as the default printer, as well. People are _very_ unlikely to connect a printer directly to a laptop if they don't want to be using it.
 * Tablets
 * should be correctly detected and functional in X with no settings adjustment required.
 * Should be able to interact with the GIMP, inkscape, xournal, and CellWriter (see http://thesopebocks.com/2009/01/15/linux-and-your-tablet-pc-making-it-usable), such that movements made cause appropriate markings in the program.
 * All applications which can use a tablet should default to the stylus acting as the writing end and the eraser acting as an erasing end. The buttons on the stylus should behave as a right-click, by default.
 * The cursor should behave like a mouse, with relevant buttons.
 * If there are buttons on the tablet, those should be detected and useable, and not be included in the tablet's view of useable space.
 * USB tablets should be hotpluggable.
 * More than one should be able to be attached and work at the same time.

[Note: For the cameras, media players, and PDAs, I think if it only asks the first time what you want the default to be, having it ask is fine. If it's every time, that's just painful. This does, of course, presume that the user doesn't select that as the behavior! -shillman]

Other Hardware

 * External NIC (USB, PC, etc)
 * Should be detected by NM, and just work as defined below:
 * For wired, it should just connect if a cable is plugged in.
 * For wireless, see the https://fedoraproject.org/wiki/Desktop/Whiteboards/HardwareHandling#Networking area
 * Bluetooth
 * Keyboard & Pointing Devices should behave as keyboards and pointing devices without configuration required.
 * Storage - see storage devices in removable media
 * Tablets should work correctly without configuration required, as per Tablets section in Other Peripherals above.
 * others TBD
 * Fingerprint reader
 * Should prompt you to swipe your finger if you enable fingerprint authentication, and allow you to use your fingerprint instead of a password in all available authentication methods that are directly at the computer (not network authentication, for example). Should walk you through the best methods to use for swiping, if you do not yet have a fingerprint stored, since apparently this takes a bit of practice to do correctly. Perhaps should have you try a few times before storing one, to make sure that you can do it consistently.