Cherry Cymotion Master Linux with Fluxbox

Some tips in getting Cherry Cymotion Master Linux (german layout image) to work with fluxbox (with Gentoo of course). This keyboard’s keys have a great feeling and a great “clickety click” sound. The 20% extra surface on the keys makes typing a lot easier but you need a couple of hours to get used to them. It’s worth it though.

First of all, don’t try to use the keyman software that Cherry provides. Just DON’T. Unless you ‘ve got LOTS of patience and some skills to fix the horrible configure/make scripts that it comes with. It’s horrible to set it up and you need to patch your kernel for it to work properly. What do you lose ? Just the K-key next to your Penguin Key (bye bye Windows Key) and the combinations that you can with the K-Key. This keyboard has SO many extra keys that you won’t need it (yet).

0) Create /etc/init.d/cherry with the following contents:
start() {
ebegin "Setting up Cherry Keyboard CyMotion Master on PS/2"
# Search Eject Home An Aus Media
# Up/Right Down/left Cut Paste Copy Desktop1
# Desktop2 Desktop3 Redo Undo
#setkeycodes e065 136 e070 161 e032 172 e05f 143 e063 145 e06d 171 \
# e00b 177 e012 178 e017 137 e00a 135 e018 133 e071 148 \
# e02c 149 e072 202 e007 129 e008 131 e05b 200
setkeycodes e065 136 e070 161 e032 172 e05f 143 e063 145 e06d 171 \
e00b 177 e012 178 e017 137 e00a 135 e018 133 e071 148 \
e02c 149 e072 202 e007 129 e008 131
eend $?
stop() {
ebegin "Restoring defaults for PS/2 keyboard"
# Search Eject Home An Aus Media
# Up/Right Down/left Cut Paste Copy Desktop1
# Desktop2 Desktop3 Redo Undo
setkeycodes e065 217 e070 000 e032 150 e05f 142 e063 143 e06d 226 \
e00b 000 e012 000 e017 000 e00a 000 e018 000 e071 000 \
e02c 000 e072 000 e007 000 e008 000 e05b 125
eend $?

Make it executable: chmod +x /etc/init.d/cherry
Start it: /etc/init.d/cherry
and add it to your default runlevel: rc-update add cherry default (on gentoo)

1) Take a look at your /usr/share/X11/XKeysymDB. This file includes all the available keyboard mappings you can have.

2) Change your Keyboard Inputdevice in /etc/X11/xorg.conf to include these (works in my current Xorg 7.1):
Option "XkbModel" "cymotionlinux"
Option "XkbVariant" "nodeadkeys"

Restart your X server.

3) Create a .Xmodmap file in your home dir and fill it with mappings from /usr/share/X11/XKeysymDB. Mine looks like this:
! Internet-Keys (Back, Forward, Stop, Reload, Search)
keycode 234 = XF86Back
keycode 233 = XF86Forward
keycode 232 = XF86Stop
keycode 231 = XF86Refresh
keycode 122 = XF86Search
! Multimedia-Keys (Play/Pause, Stop, Back, Forward, Eject)
keycode 162 = XF86AudioPlay
keycode 164 = XF86AudioStop
keycode 144 = XF86AudioPrev
keycode 153 = XF86AudioNext
keycode 204 = XF86Eject
! XPress-Keys left (Up, Down, Cut, Paste, Copy)
keycode 220 = XF86ScrollUp
keycode 143 = XF86ScrollDown
keycode 188 = XF86Cut
keycode 192 = XF86Paste
keycode 248 = XF86Copy
! XPress-Keys right (List 1, List 2, List 3, Redo, Undo)
!keycode 159 = XF86Launch0
!keycode 151 = XF86Launch1
!keycode 171 = XF86Launch2
!keycode 138 = XF86Launch3
!keycode 135 = XF86Launch4
! Premium-Keys (Calculator, Email, Browser, On/Off)
keycode 161 = XF86Calculator
keycode 236 = XF86Mail
keycode 130 = XF86HomePage
keycode 199 = XF86LogOff
! Main-Keys (-, +, Mute, Media-Player)
keycode 174 = XF86AudioLowerVolume
keycode 176 = XF86AudioRaiseVolume
keycode 160 = XF86AudioMute
keycode 129 = XF86AudioMedia
! @-Key
keycode 116 = XF86Terminal

Do a:
xmodmap ~/.Xmodmap

You can test your multimedia keys using xev.
If you want fluxbox to automatically load these binding each time you logon, put “xmodmap ~/.Xmodmap” somewhere (NOT in the end) inside your ~/.fluxbox/startup

4) Edit your ~/.fluxbox/keys and map the new keys to actions like that:
None XF86Launch1 :Workspace 1
None XF86Launch2 :Workspace 2
None XF86Launch3 :Workspace 3
None XF86AudioPrev :ExecCommand audacious--rew
None XF86AudioPlay :ExecCommand audacious --play-pause
None XF86AudioNext :ExecCommand audacious --fwd
None XF86AudioStop :ExecCommand audacious --stop
None XF86Eject :ExecCommand audacious -j
None XF86AudioLowerVolume :ExecCommand amixer sset PCM 2-
None XF86AudioMute :ExecCommand amixer sset "Audigy Analog/Digital Output Jack" toggle
None XF86AudioRaiseVolume :ExecCommand amixer sset PCM 2+
None XF86AudioMedia :ExecCommand gmplayer
None XF86Calculator :ExecCommand gcalctool
None XF86Mail :ExecCommand /usr/bin/thunderbird
None XF86HomePage :ExecCommand /usr/bin/firefox
None XF86Terminal :ExecCommand mrxvt --loginShell

Restart Fluxbox. You should now be able to start applications using your multimedia keys on top and on the bottom. If you are using Gnome or KDE you can do all this with their own programs. I think the proper program in KDE is called khotkeys.

5) In order to use the side keys for more advanced functions like copy,paste,unde,redo,etc do the following:
Create /usr/share/X11/xkb/compat/cymotion with what you like. Mine looks like:
// $XFree86$
// XFree86 special keysyms
default partial xkb_compatibility "basic" {
interpret.repeat= True;
// Ctrl+C for Copy
interpret XF86Copy {
action = Redirect(Key=<AB03>, modifiers=Control);
// Ctrl+V for Paste
interpret XF86Paste {
action = Redirect(Key=<AB04>, modifiers=Control);
// Ctrl+X for Cut
interpret XF86Cut {
action = Redirect(Key=<AB02>, modifiers=Control);
// Ctrl+Pos1 for ScrollUp
interpret XF86ScrollUp {
action = Redirect(Key=<HOME>, modifiers=Control);
// Ctrl+End for ScrollDown
interpret XF86ScrollDown {
action = Redirect(Key=<END>, modifiers=Control);
// Ctrl+Shift+Z for Redo
interpret Redo {
action = Redirect(Key=<AB01>, modifiers=Shift+Control);
// Ctrl+Z for Undo
interpret Undo {
action = Redirect(Key=<AB01>, modifiers=Control);
// Backspace for Back (Firefox)
interpret XF86Back {
action = Redirect(Key=<BKSP>);
// Shift+Backspace for Forward (Firefox)
interpret XF86Forward {
action = Redirect(Key=<BKSP>, modifiers=Shift);
// ESC for Stop (Firefox)
interpret XF86Stop {
action = Redirect(Key=<ESC>);
// Ctrl+R for Reload (Firefox)
interpret XF86Reload {
action = Redirect(Key=<AD04>, modifiers=Control);
// Ctrl+F for Search Page (Firefox and most other applications)
interpret XF86Search {
action = Redirect(Key=<AC04>, modifiers=Control);

6) Edit /usr/share/X11/xkb/compat/complete and add inside it:
augment "cymotion"

Restart X.

And you should be done.

The process is a bit complicated but the result is very rewarding. The Cut/Copy/Paste with just one click is amazing, especially for Greek users because when someone with another keyboard switches the keyboard language to greek, “ctrl+c” becomes “ctrl+ψ” (ctrl+greek_psi) and copy/paste does not work any more (ctrl+insert and shift+insert are not very efficient shortcuts) . You can easily program Cymotion Master Linux keyboard though to send the keystrokes you want (that was what I did in /usr/share/X11/xkb/compat/cymotion) because there are so many extra keys to use 🙂

Here comes the result of all these (click to maximize):