Честно говоря мне с gpm разбираться лень (я с ним даже как простой пользователь не общался никогда).
Так что рекомендую поизучать /usr/src/linux/drivers/input/mousedev.c. В частности функцию mousedev_packet. Пакет данных на самом деле очень простой, кажется. Особенно если нас интересуют только нажатые клавиши. Единственная мелочь - протоколы бывают 3-х и 4-х байтовые (обычный PS2 - 3хбайтовый, у меня именно так). Информация о трёх первых нажатых кнопках содержится в трёх младших битах первого байта. Всё.
Добавлено чуть позже
Вот, написал относительно правдоподобный обработчик клика:
Код:
#!/usr/bin/python
f = file("/dev/input/mice")
l, r = 0, 0
while 1:
buttons = ord(f.read(3)[0])
nl, nr = buttons&1, buttons&2
if l and not nl:
print "left release"
if r and not nr:
print "right release"
l, r = nl, nr
Добаволено ещё чуть позже
Пораскинул мозгами и понял, что /dev/input/mice по умолчанию всегда выдаёт в PS2 всё. И чтобы перевести её в расширенный режим надо что-то сделать. Вывод на сделан на основе того, что мышь у меня со скролом (т.е. привтворяется пятикнопочной), а PS2 несёт информацию только о 3-х кнопках. При этом иксы питаясь от того же /dev/input/mice на скролл реагируют -> каким-то образом переводят его в расширенный режим (т.е. один из двух 4-х юайтовых протоколов). Как это делается - ни малейшего представления.