В терминале всегда было действительно трудно иметь этот вид информации. Можно только получить "код клавиши" и, конечно, это означает разные вещи в зависимости от того, какую комбинацию ОС, клавиатуры и терминала Вы используете.
Вы найдете полный список тех кодом клавиши на Вашей ОС с вызовом к xmodmap.
$ xmodmap -pke
keycode 9 = Escape NoSymbol Escape
keycode 10 = ampersand 1 ampersand 1 dead_caron dead_ogonek dead_caron dead_ogonek
keycode 11 = eacute 2 eacute 2 asciitilde Eacute asciitilde Eacute
[...]
keycode 244 = XF86Battery NoSymbol XF86Battery
keycode 245 = XF86Bluetooth NoSymbol XF86Bluetooth
keycode 246 = XF86WLAN NoSymbol XF86WLAN
keycode 247 =
И список всех модификаторов оценивает с этим:
$ xmodmap
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
Существует некоторая необработанная информация в terminfo базе данных или более полируется в ncurses API чтобы разработчикам системы справочной информации для преодоления этой путаницы.
Если можно снова использовать существующий исходный код как один нано, он должен сохранить Вас много времени. Смотрите на функцию "get_escape_seq_kbinput" для наблюдения то, что я имею в виду.
Если Вам просто нужна современная поддержка Linux, возможно, что вызов к keyname достаточно.
Все упомянутые программы имеют a pts
. Проблема не состоит в том, что Ваши указанные терминалы не имеют pts устройства, но что информация не зарегистрирована.
who
who
получает его информация от a utmp
файл, обычно /var/run/utmp
и записан в самими программами. Для записи utmp
программы записи должны иметь доступ к файлу, который не имеют нормальные, стандартные приложения как lxterm или urxvt.
/var/run/utmp
для приложенийОбычно /var/run/utmp
не является записываемым для обычного пользователя, т.е. программы не могут создать новые записи, поскольку злонамеренный пользователь мог просто перезаписать файл или записать поддельные записи.
В моей системе /var/run/utmp
имеет следующие полномочия:
$ ls -l /var/run/utmp
-rw-rw-r-- 1 root utmp 3072 Jan 28 08:26 /var/run/utmp
это означает для записи в файл, которым Вам, должно быть, придется, по крайней мере, быть в группе.
Лучшее решение дать полномочия программам для обновления /var/run/utmp
изменяет полномочия программы, таким образом, она может обновить файл. Можно сделать это путем установки группы исполняемого файла к utmp
и набор setgid
флаг, что означает это, установит идентификатор группы из полномочий файла, т.е.:
chgrp utmp /usr/bin/urxvt
chmod g+s /usr/bin/urxvt
This process is currently running setuid or setgid. This is not a supported use of GTK+. You must create a helperprogram instead. For further details, see: http://www.gtk.org/setuid.html
. Возможно, это не возможно с этими терминалами затем. Однако я также заметил, что полномочия/владение для терминала гнома совпадают с, они были для lxterminal в начале. терминал гнома – Thomas Shaw 28.01.2013, 16:27/usr/lib/utempter/utempter
). – Stéphane Chazelas 28.01.2013, 19:22