Почему только некоторые терминалы получают pts

В терминале всегда было действительно трудно иметь этот вид информации. Можно только получить "код клавиши" и, конечно, это означает разные вещи в зависимости от того, какую комбинацию ОС, клавиатуры и терминала Вы используете.

Вы найдете полный список тех кодом клавиши на Вашей ОС с вызовом к 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 достаточно.

0
28.01.2013, 05:28
1 ответ

Исходный вопрос

Все упомянутые программы имеют a pts. Проблема не состоит в том, что Ваши указанные терминалы не имеют pts устройства, но что информация не зарегистрирована.

Почему не делает lxterminal, или другие терминалы обнаруживаются в 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
4
28.01.2020, 02:21
  • 1
    я попробовал то, что Вы сказали и получили это сообщение: 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
  • 2
    @ThomasShaw использует гнома-помощника имущества, который имеет appropiate полномочия –  Ulrich Dangel 28.01.2013, 16:44
  • 3
    , В то время как это раньше было верно, эмуляторы терминала теперь переключаются на использование libutempter, который использует setgid помощника для обновления utmp (в моей системе /usr/lib/utempter/utempter). –  Stéphane Chazelas 28.01.2013, 19:22
  • 4
    @StephaneChazelas базовая проблема (разрешение) не является точно тем же. vte использует/использует также гнома-помощника имущества –  Ulrich Dangel 28.01.2013, 20:35
  • 5
    , при попытке установить lxterminal setgid в недавней системе, то gtk будет жаловаться (<пред> GTK-ПРЕДУПРЕЖДЕНИЕ **: Этот процесс в настоящее время выполняет setuid или setgid. Это не поддерживаемое использование GTK +. Необходимо создать программу помощника вместо этого. Для получения дальнейшей информации см.: gtk.org/setuid.html, Отказывающийся инициализировать GTK +. </pre>), и необходимо использовать помощника. –  Stéphane Chazelas 28.01.2013, 20:48

Теги

Похожие вопросы