$pagetitle="Microsoft Pro Keyboards and KDE"; require("./header.php"); ?>
Have you gone mad? Supporting Microsoft Products?!
Let me start by saying I'm not exactly a "fan" of Microsoft. In fact, for the most part I avoid
their products whenever possible. There is one notable exception, and that is hardware.
Microsoft has produced some fairly nice and useful hardware. The Microsoft Natural Pro keyboard that I have is one of these nice pieces of hardware. It has some extra buttons at the top that provide one with instant access to, if nothing else, extra buttons. ;-)
Seeing as they are labeled, I've decided to put a few of them to use. My favorite button is the mute button. Perfect for those times where you're in the middle of a CounterStrike session and the phone rings.
Seeing as I use Linux.. I had to figure out how to make these buttons work on my own. So, here is the method I used.
Step one.. xmodmap.
Ok, the first step is mapping the raw keycodes to keystrokes that X applications understand.
This is what xmodmap does.
For my setup, keycode 160 is generated when the Mute button is pressed. I found this out by using the program 'xev', or "X Event Viewer". It tells you in the terminal what events have been delivered to it. So I pressed the button while it had the focus, and I got this:
KeyPress event, serial 27, synthetic NO, window 0x4000001, root 0x54, subw 0x0, time 3139698373, (-1270,697), root:(37,717), state 0x0, keycode 178 (keysym 0x1008ff18, XF86HomePage), same_screen YES, XLookupString gives 0 characters: ""
Now.. actually.. this is for the "Mail" button, so it says 178 instead of 160. It appears
differently when you have xmodmap to deal with it properly.
! Mute keycode 160=F22
This should automatically load whenever X is started. You can also load it manually by typing:
So now whenever you press the Mute key, it will register to X applications as "F22".
Ok, great, NOW WHAT?
Ok, well now is where things differ between window managers. I'm a weenie who uses(hey don't
shoot me) KDE2. You might not think it very geekish to run such a windows-like environment,
but I don't really care. KDE2 works, and lets me focus on what I really need to do. I'm not
going to go any further on that.
Anyways, Here is how I did it under KDE2. If you have other window managers/environments that you have done this in too, let me know.
First of all, I created some scripts to call aumix. This might be the hard way, but here are my scripts:
muteon: #!/bin/sh aumix -q | grep ^vol > .aumixmuted aumix -v0 rxvt -geometry 40x1 -title "Mute On" -e sleep 1 & muteoff: #!/bin/sh if [ -e .aumixmuted ] ; then aumix -v`sed -e 's/vol //' .aumixmuted | sed -e 's/, .*$//'` rm .aumixmuted else aumix -v75 fi rxvt -geometry 40x1 -title "Mute Off" -e sleep 1 & aumute: #!/bin/sh MUTEOFF=~/muteoff MUTEON=~/muteon volume=`aumix -q | grep vol | sed -e 's/vol //' | sed -e 's/, .*$//'` if [ $volume -eq "0" ] ; then $MUTEOFF else $MUTEON fi
I had to do it this way because I couldn't find a "toggle mute" command line utility.
So now I just need KDE to call aumute whenever it gets an F22. I do this by creating a
menu shortcut(could be desktop, but I'm not a big fan of these).
Here's my volup and voldown scripts too. These get passed an argument, the number of
percentage points to move up or down.
volup: #!/bin/sh volume=`aumix -q | grep vol | sed -e 's/vol //' | sed -e 's/, .*$//'` if [ $volume -lt "100" ] ; then let newvolume=$volume+$1 aumix -v$newvolume fi voldown: #!/bin/sh volume=`aumix -q | grep vol | sed -e 's/vol //' | sed -e 's/, .*$//'` if [ $volume -gt "0" ] ; then let newvolume=$volume-$1 aumix -v$newvolume fi