Difference between revisions of "Tablet Hardware Buttons"

From ThinkWiki
Jump to: navigation, search
(+X200 Tablet scancodes. Generalized intro. -broken link.)
(changed category)
 
(14 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 
{| width="100%"
 
{| width="100%"
|style="vertical-align:top;padding-right:20px;width:10px;" |
+
|style="vertical-align:top;padding-right:20px;width:10px;" | __NOTOC__
 +
[[Image:X41 tablet_HW_buttons.JPG|224px]]
 
|style="vertical-align:top" |
 
|style="vertical-align:top" |
 
<div style="margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;">
 
<div style="margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;">
 
===Tablet Hardware Buttons===
 
===Tablet Hardware Buttons===
The Thinkpad tablets includes hardware buttons located on the
+
The 2-in-1 convertible ThinkPads includes push-buttons located on the bottom of the display panel's bezel. They are specifically designed to be used when the ThinkPad is in tablet mode, although they are still accessible when in laptop mode.
LCD screen bezel. They are designed to be used when the ThinkPad is
+
 
converted to the tablet configuration (though they are still
+
These buttons are supposed to act as a temporary keyboard replacement when in tablet mode, as the keyboard is completely inaccessible in that mode.
accessible when in the laptop configuration).
 
 
</div>
 
</div>
 +
|style="vertical-align:top" |
 
|}
 
|}
 +
===Overview===
 +
Not all 2-in-1 convertibles feature the same amount of buttons, some even output different scancodes/keycodes as well due to their functions' being changed.
 +
 +
For the X41 Tablet, there are 8 buttons in total: the power button with a sliding lock, a Ctrl-Alt-Del shortcut button, a Screen Rotation button, a Tablet shortcut menu button, an Escape button, an Enter button, and the Page up and down buttons.
  
The X41 Tablet hardware buttons include:
+
The X60 Tablet and the X61 Tablet were given a reduced set of buttons, likely for the purpose of cutting down on costs. So far, there are 5 buttons in total: the power button with a sliding lock, a Ctrl-Alt-Del shortcut button, the Escape button, and a circular directional pad.
*Power (with sliding lock)
 
*Cltr-Alt-Del [sic]
 
*Page up
 
*Page down
 
*Enter
 
*Escape
 
*Screen Rotation
 
*Tablet shortcut menu
 
  
 +
The X200 Tablet, X201 Tablet, and the X201i Tablet had the same amount of buttons as the X60 Tablet and the X61 Tablet. However, the directional pad was removed in favor of a padlock button that seems to do nothing (doesn't generate a scancode and doesn't affect the other buttons' operations). Due to the directional pad's removal, the buttons were once again changed in functionality. While the power button and its sliding lock remained the same, the other buttons were not functionally identical. For example, the Ctrl-Alt-Del shortcut function was replaced with a 180-degree rotate function, and the Escape button's functionality was replaced with a portrait/landscape switch function. The last button that was modified was the Tablet shortcut menu button, which now launches the ThinkVantage toolbox as opposed to a special tablet menu.
  
 +
The X220 Tablet, X220i Tablet, X230 Tablet, and the X230i Tablet were given a reduction in buttons again, possibly to reduce cost. It was worse than the previous generation's 5-button set, as they all had only 3 buttons: the power button with no sliding lock, a 180-degree rotate button, and the portrait/landscape switch button.
  
==Linux Support==
+
===Linux support===
 
The hardware buttons (except power) are recognized by the standard atkbd kernel driver which emits the following scancodes:
 
The hardware buttons (except power) are recognized by the standard atkbd kernel driver which emits the following scancodes:
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
! Key !! X41 Scancode || {{X60t}} Scancode || {{X61_Tablet}} Scancode || {{X200_Tablet}} Scancode
+
! Key !! {{X41 Tablet}} Scancode || {{X60 Tablet}} Scancode || {{X61 Tablet}} Scancode || {{X200 Tablet}} Scancode || {{X201 Tablet}}<br>{{X201i Tablet}} Scancode || {{X220 Tablet}}<br>{{X220i Tablet}} Scancode || {{X230 Tablet}}<br>{{X230i Tablet}} Scancode
 +
|-
 +
| Page up  || 0x6D || NA || NA || NA || NA || NA || NA
 
|-
 
|-
| Page up  || 0x6D || NA || NA || NA
+
| Page down || 0x6E || NA || NA || NA || NA || NA || NA
 
|-
 
|-
| Page down || 0x6E || NA || NA || NA
+
| Enter || 0x69 || 0x69 || 0x69 || NA || NA || NA || NA
 
|-
 
|-
| Enter || 0x69 || 0x69 || 0x69 || NA
+
| Esc || 0x6B || 0x6B || 0x6b || NA || NA || NA || NA
 
|-
 
|-
| Esc || 0x6B || 0x6B || 0x6b || NA
+
| Toolbox || 0x68 || 0x68 || 0x68 || 0x66 || 0x68 || NA || NA
 
|-
 
|-
| Toolbox || 0x68 || 0x68 || 0x68 || 0x66
+
| Rotate || 0x6C || 0x6c || 0x6c || 0x6b || 0x6c || TBD || TBD
 
|-
 
|-
| Rotate || 0x6C || 0x6c || 0x6c || 0x6b
+
| Ctrl-Alt-Del (Unlabeled) || 0x67 || NA || 0x67 || 0xe0 0x12 || 0x67 || NA || NA
 
|-
 
|-
| (Unlabeled) || 0x67 || NA || 0x67 || 0xe0 0x12
+
| Padlock || NA || NA || NA || (nothing?) || 0x66 || NA || NA
 
|-
 
|-
| Right || NA || 0x6D || 0x6d || NA
+
| Right || NA || 0x6D || 0x6d || NA || NA || NA || NA
 
|-
 
|-
| Left || NA || 0x6E || 0x6e || NA
+
| Left || NA || 0x6E || 0x6e || NA || NA || NA || NA
 
|-
 
|-
| Up || NA || 0x71 || 0x71 || NA
+
| Up || NA || 0x71 || 0x71 || NA || NA || NA || NA
 
|-
 
|-
| Down || NA || 0x6F || 0x6f || NA
+
| Down || NA || 0x6F || 0x6f || NA || NA || NA || NA
 
|-
 
|-
 
 
|}
 
|}
  
 
Notes:
 
Notes:
* X200 Tablet
 
*: Layout: power (with sliding lock); clockwise-arrow (formerly unlabeled); rotate (two boxes and an arrow); Toolbox (the icon is now a menu); padlock.
 
*: The padlock button seems to do nothing.  It generates no scancode, and has no effect on the other buttons.
 
*: The clockwise-arrow button returns a scancode pair.  So you say {{cmduser|setkeycodes e012 ''whatever''}}.
 
 
 
The utility setkeycodes can be used to map these scancodes to keycodes. Read {{cmduser|man setkeycodes}} for usage.
 
The utility setkeycodes can be used to map these scancodes to keycodes. Read {{cmduser|man setkeycodes}} for usage.
 
For example, the following command will map the page up and page down buttons to their respective keys:
 
For example, the following command will map the page up and page down buttons to their respective keys:
Line 65: Line 60:
 
{{cmdroot|setkeycodes 6e 109 6d 104}}
 
{{cmdroot|setkeycodes 6e 109 6d 104}}
  
==Models featuring this Device==
+
===Configuration with xbindkeys===
* {{X41_Tablet}}, {{X60t}}, {{X61_Tablet}}, {{X200_Tablet}}
+
The <tt>xbindkeys</tt> utility can be used to bind actions to the buttons once they have key codes (which they have by default in Debian). This example is for an {{X200_Tablet}} running Debian Wheezy, but should be applicable to other models and distributions. For support status, see the [https://code.edge.launchpad.net/~karl.hegbloom/tabuntu/tablet-screen-rotation-support Tablet Screen Rotation Support] page.
 +
 
 +
First create a default {{path|~/.xbindkeysrc}} file with this command:
 +
 
 +
{{cmduser|xbindkeys --defaults > ~/.xbindkeysrc}}
 +
 
 +
This file will contain the key bindings for each key, and the commands associated with them. More information on the file can be found on [https://wiki.archlinux.org/index.php/Xbindkeys ArchWiki's Xbindkeys page].
 +
 
 +
Next, use the {{cmduser|xbindkeys -k}} command to generate the bindings to add to it. When the command is run, a window with a white background will appear. Select it and press the key you wish to bind. It will close and the binding will be printed to the terminal. For example (for the {{ibmkey|Tablet rotate|#494949}} button):
 +
 
 +
"(Scheme function)"
 +
    m:0x0 + c:161
 +
    NoSymbol
 +
 
 +
Copy and paste this into your {{path|~/.xbindkeysrc}} file, replacing <tt>"(Scheme function)"</tt> with the command you wish to execute when the button is pressed.
 +
 
 +
A {{path|~/.xbindkeysrc}} for an {{X200_Tablet}} might look like this:
 +
 
 +
# (Automatically generated documentation)
 +
# ...
 +
 +
#Tablet Rotate button (run rotate script)
 +
"~/scripts/rotate.sh"
 +
# Replace the line above with the path to the script
 +
    m:0x0 + c:161
 +
    NoSymbol
 +
 +
#Tablet Toolbox button (show cellwriter)
 +
"cellwriter --show-window"
 +
    m:0x0 + c:149
 +
    NoSymbol
 +
 
 +
This file binds the {{ibmkey|Tablet rotate|#494949}} button to a bash script that rotates the display (see below), and the {{ibmkey|Tablet shortcut|#494949}} button to the [http://www.risujin.org/cellwriter/ cellwriter input panel].
 +
 
 +
The bindings will only work while {{cmduser|xbindkeys}} is running, however. Most desktop environments have a GUI to run commands at login. In Gnome 3, this is the Startup Applications app.
 +
 
 +
===Screen rotation script===
 +
The example {{path|~/.xbindkeysrc}} file above references a bash script that performs screen rotation. This is listed below:
 +
 
 +
#!/bin/bash
 +
tablet="Serial Wacom Tablet stylus"
 +
 +
# Get the current orientation of the tablet
 +
rotate=$(xsetwacom get "$tablet" Rotate)
 +
 +
# Work out the next tablet and screen orientations (rotating clockwise)
 +
case "$rotate" in
 +
    none) nextRotate="cw"
 +
          nextOrient="right" ;;
 +
    cw)  nextRotate="half"
 +
          nextOrient="inverted" ;;
 +
    half) nextRotate="ccw"
 +
          nextOrient="left" ;;
 +
    ccw)  nextRotate="none"
 +
          nextOrient="normal" ;;
 +
esac
 +
 +
# Rotate the screen
 +
xrandr -o $nextOrient
 +
 +
# Rotate the tablet
 +
xsetwacom set "$tablet" Rotate $nextRotate
 +
 
 +
Save this as a text file with the extension <tt>.sh</tt> somewhere on your system, mark it executable with {{cmduser|chmod +x <path to script>}}, and put the path in your {{path|~/.xbindkeysrc}}, on the appropriate line.
 +
 
 +
You may have to replace <tt>"Serial Wacom Tablet stylus"</tt> with the name of your Wacom tablet. You can find this with the {{cmduser|xsetwacom list devices}} command.
 +
 
 +
For more information regarding these buttons, see the [[How to get special keys to work]] page.
 +
 
 +
==Models featuring this technology==
 +
* {{X41 Tablet}}, {{X60 Tablet}}, {{X61 Tablet}}, {{X200 Tablet}}, {{X201 Tablet}}, {{X201i Tablet}}, {{X220 Tablet}}, {{X220i Tablet}}, {{X230 Tablet}}, {{X230i Tablet}}
  
[[Category:Components]]
+
[[Category:ThinkPad Technologies]]

Latest revision as of 16:00, 22 January 2021

X41 tablet HW buttons.JPG

Tablet Hardware Buttons

The 2-in-1 convertible ThinkPads includes push-buttons located on the bottom of the display panel's bezel. They are specifically designed to be used when the ThinkPad is in tablet mode, although they are still accessible when in laptop mode.

These buttons are supposed to act as a temporary keyboard replacement when in tablet mode, as the keyboard is completely inaccessible in that mode.

Overview

Not all 2-in-1 convertibles feature the same amount of buttons, some even output different scancodes/keycodes as well due to their functions' being changed.

For the X41 Tablet, there are 8 buttons in total: the power button with a sliding lock, a Ctrl-Alt-Del shortcut button, a Screen Rotation button, a Tablet shortcut menu button, an Escape button, an Enter button, and the Page up and down buttons.

The X60 Tablet and the X61 Tablet were given a reduced set of buttons, likely for the purpose of cutting down on costs. So far, there are 5 buttons in total: the power button with a sliding lock, a Ctrl-Alt-Del shortcut button, the Escape button, and a circular directional pad.

The X200 Tablet, X201 Tablet, and the X201i Tablet had the same amount of buttons as the X60 Tablet and the X61 Tablet. However, the directional pad was removed in favor of a padlock button that seems to do nothing (doesn't generate a scancode and doesn't affect the other buttons' operations). Due to the directional pad's removal, the buttons were once again changed in functionality. While the power button and its sliding lock remained the same, the other buttons were not functionally identical. For example, the Ctrl-Alt-Del shortcut function was replaced with a 180-degree rotate function, and the Escape button's functionality was replaced with a portrait/landscape switch function. The last button that was modified was the Tablet shortcut menu button, which now launches the ThinkVantage toolbox as opposed to a special tablet menu.

The X220 Tablet, X220i Tablet, X230 Tablet, and the X230i Tablet were given a reduction in buttons again, possibly to reduce cost. It was worse than the previous generation's 5-button set, as they all had only 3 buttons: the power button with no sliding lock, a 180-degree rotate button, and the portrait/landscape switch button.

Linux support

The hardware buttons (except power) are recognized by the standard atkbd kernel driver which emits the following scancodes:

Key X41 Tablet Scancode X60 Tablet Scancode X61 Tablet Scancode X200 Tablet Scancode X201 Tablet
X201i Tablet Scancode
X220 Tablet
X220i Tablet Scancode
X230 Tablet
X230i Tablet Scancode
Page up 0x6D NA NA NA NA NA NA
Page down 0x6E NA NA NA NA NA NA
Enter 0x69 0x69 0x69 NA NA NA NA
Esc 0x6B 0x6B 0x6b NA NA NA NA
Toolbox 0x68 0x68 0x68 0x66 0x68 NA NA
Rotate 0x6C 0x6c 0x6c 0x6b 0x6c TBD TBD
Ctrl-Alt-Del (Unlabeled) 0x67 NA 0x67 0xe0 0x12 0x67 NA NA
Padlock NA NA NA (nothing?) 0x66 NA NA
Right NA 0x6D 0x6d NA NA NA NA
Left NA 0x6E 0x6e NA NA NA NA
Up NA 0x71 0x71 NA NA NA NA
Down NA 0x6F 0x6f NA NA NA NA

Notes: The utility setkeycodes can be used to map these scancodes to keycodes. Read $ man setkeycodes for usage. For example, the following command will map the page up and page down buttons to their respective keys:

# setkeycodes 6e 109 6d 104

Configuration with xbindkeys

The xbindkeys utility can be used to bind actions to the buttons once they have key codes (which they have by default in Debian). This example is for an X200 Tablet running Debian Wheezy, but should be applicable to other models and distributions. For support status, see the Tablet Screen Rotation Support page.

First create a default ~/.xbindkeysrc file with this command:

$ xbindkeys --defaults > ~/.xbindkeysrc

This file will contain the key bindings for each key, and the commands associated with them. More information on the file can be found on ArchWiki's Xbindkeys page.

Next, use the $ xbindkeys -k command to generate the bindings to add to it. When the command is run, a window with a white background will appear. Select it and press the key you wish to bind. It will close and the binding will be printed to the terminal. For example (for the Tablet rotate button):

"(Scheme function)"
    m:0x0 + c:161
    NoSymbol

Copy and paste this into your ~/.xbindkeysrc file, replacing "(Scheme function)" with the command you wish to execute when the button is pressed.

A ~/.xbindkeysrc for an X200 Tablet might look like this:

# (Automatically generated documentation)
# ...

#Tablet Rotate button (run rotate script)
"~/scripts/rotate.sh"
# Replace the line above with the path to the script
    m:0x0 + c:161
    NoSymbol

#Tablet Toolbox button (show cellwriter)
"cellwriter --show-window"
    m:0x0 + c:149
    NoSymbol

This file binds the Tablet rotate button to a bash script that rotates the display (see below), and the Tablet shortcut button to the cellwriter input panel.

The bindings will only work while $ xbindkeys is running, however. Most desktop environments have a GUI to run commands at login. In Gnome 3, this is the Startup Applications app.

Screen rotation script

The example ~/.xbindkeysrc file above references a bash script that performs screen rotation. This is listed below:

#!/bin/bash
tablet="Serial Wacom Tablet stylus"

# Get the current orientation of the tablet
rotate=$(xsetwacom get "$tablet" Rotate)

# Work out the next tablet and screen orientations (rotating clockwise)
case "$rotate" in
    none) nextRotate="cw"
          nextOrient="right" ;;
    cw)   nextRotate="half"
          nextOrient="inverted" ;;
    half) nextRotate="ccw"
          nextOrient="left" ;;
    ccw)  nextRotate="none"
          nextOrient="normal" ;;
esac

# Rotate the screen
xrandr -o $nextOrient

# Rotate the tablet
xsetwacom set "$tablet" Rotate $nextRotate

Save this as a text file with the extension .sh somewhere on your system, mark it executable with $ chmod +x <path to script>, and put the path in your ~/.xbindkeysrc, on the appropriate line.

You may have to replace "Serial Wacom Tablet stylus" with the name of your Wacom tablet. You can find this with the $ xsetwacom list devices command.

For more information regarding these buttons, see the How to get special keys to work page.

Models featuring this technology