LINUX.ORG.RU

Home и End кнопки не работают

 , ,


0

1

Всем привет! Подскажите плз как побороть эту мурню. Из дома иногда приходится работать по ssh и не могу лазить нормально по логам - прыгнуть в конец/начало нет возможности.
По этой доке вроде бы все сделал: http://wiki.archlinux.org/index.php/Home_and_End_keys_not_working Но ничего не произошло.
Система Arch
Ноут dell e6410
Терминал uxrvt (другие тоже пробовал - все так же)
В less пофиксило добавление файла .lesskey и в него:
\e[8~ goto-end
\e[7~ goto-line
Однако это только пофиксило перемещение по less на локальной машине. По ssh все по-прежнему.

Дополнительное инфа:
В /etc/inputrc:
«\e[7~»: beginning-of-line
«\e[8~»: end-of-line

В .Xresources:
URxvt*termName: rxvt-unicode
URxvt.keysym.Home: \033[7~
URxvt.keysym.End: \033[8~
URxvt.keysym.KP_Home: \033[7~
URxvt.keysym.KP_End: \033[8~

Посоветуйте плз что то, буду признателен)

Скорее всего, у тебя изначально эти кнопки генерируют не те сканкоды, которые нужны. Чтобы работало всегда и везде, надо их перенастроить.

Я себе так менял KP_* на нормальные клавиши, потому что эти KP_* почти нигде не работают. Я сделал через udev hwdb, другие методы не работали (setkeycodes, например, не все кнопки переназначал; xmodmap только в иксах работает).

tiandrey ★★★★★
()

Собственно, как делать: создаёшь файл /lib/udev/hwdb.d/90-custom-keyboard.hwdb с таким содержимым:

keyboard:dmi:bvn*:bvr*:bd*:svn<ПРОИЗВОДИТЕЛЬ, у тебя, вероятно, DELL>*:pn<МОДЕЛЬ, у тебя, вероятно, E6410>:pvr*
 KEYBOARD_KEY_<сканкод>=<клавиша>
 KEYBOARD_KEY_<сканкод>=<клавиша>
...
Сканкоды можно узнать в консольке с помощью showkey -s. После этого запускаешь udevadm hwdb -u и перезагружаешься.

Подробные комментарии можешь прочитать в /lib/udev/hwdb.d/60-keyboard.hwdb.

У меня такой конфиг на Asus NP550JK (сделал из Home/End/PgUp/PgDown на цифровом блоке нормальные кнопки):

keyboard:dmi:bvn*:bvr*:bd*:svnASUS*:pnN550JK:pvr*
 KEYBOARD_KEY_49=pageup
 KEYBOARD_KEY_51=pagedown
 KEYBOARD_KEY_47=home
 KEYBOARD_KEY_4f=end

tiandrey ★★★★★
()
Последнее исправление: tiandrey (всего исправлений: 1)
Ответ на: комментарий от tiandrey

Большое спасибо, но пока что не помогло.
Выяснил что не работает только в иксах.
Что было сделано:

sudo evtest /dev/input/event0

Event: time 1453374193.029858, -------------- SYN_REPORT ------------
Event: time 1453374193.101136, type 4 (EV_MSC), code 4 (MSC_SCAN), value cf
Event: time 1453374193.101136, type 1 (EV_KEY), code 107 (KEY_END), value 0
Event: time 1453374193.101136, -------------- SYN_REPORT ------------
Event: time 1453374195.246625, type 4 (EV_MSC), code 4 (MSC_SCAN), value c7
Event: time 1453374195.246625, type 1 (EV_KEY), code 102 (KEY_HOME), value 1
Таким образом имеем 102 и 107 клавиши
Добавлен файл:

cat /etc/udev/hwdb.d/70-keyboard.hwdb

evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDell*:pn*
KEYBOARD_KEY_102=home
KEYBOARD_KEY_107=end

Далее выполнено:

sudo udevadm hwdb --update

sudo udevadm trigger /dev/input/event0

На данный момент привязка есть, как я понимаю:

udevadm info /dev/input/event0 | egrep «102|107»

E: KEYBOARD_KEY_102=home
E: KEYBOARD_KEY_107=end

Но это не исправляет проблему. В иксах не работает. В обычной консоли работает и без этих правок)
Куда еще посмотреть? Спасибо!

dimdiden
() автор топика
Ответ на: комментарий от dimdiden

Не-не-не, там шестнадцатеричный код должен быть, два символа. Посмотри, что showkey покажет, он как раз в шестнадцатеричном виде выдаёт.

tiandrey ★★★★★
()
Ответ на: комментарий от tiandrey

sudo showkey -s

^[[7~0xe0 0x47
0xe0 0xc7
^[[7~0xe0 0x47 0xe0 0xc7
Это был нажат home.

^[[8~0xe0 0x4f
0xe0 0xcf
^[[8~0xe0 0x4f
Это end.

Я так понимаю что мои числа 47 и 4f соответственно. Поменял на эти значения:

udevadm info /dev/input/event0 | egrep «47|4f»

E: KEYBOARD_KEY_47=home
E: KEYBOARD_KEY_4f=end

Безрезультатно, на эти кнопки less не реагирует. В консоли в начало/конец строки нормально перемещается по этим клавишам. Тут вопрос только в less, только в иксах и только по ssh.

dimdiden
() автор топика
Ответ на: комментарий от dimdiden

Для начала попробуй убрать все свои модификации в .lesskey, inputrc и Xresources; перезапусти иксы; запусти xev и смотри, какие коды генерируются, когда нажимаешь на свой Home и End. Должны быть соответственно Home и End, а не KP_Home и KP_End.

tiandrey ★★★★★
()
Последнее исправление: tiandrey (всего исправлений: 1)
Ответ на: комментарий от tiandrey

Сделал, но все равно ничего не выходит(. Это чисто проблема иксов. Может какую то опцию в /etc/X11/xorg.conf.d/00-keyboard.conf написать?

dimdiden
() автор топика
Ответ на: комментарий от dimdiden

В обычной консоли работает и без этих правок)

значит сканкоды верные, менять их ненадо. проверь через xev | grep keysym или при нажатии иксы правильный алиас назначают — у меня например так:

yunake@x230:~$ xev | G keysym
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    state 0x0, keycode 110 (keysym 0xff50, Home), same_screen YES,
    state 0x0, keycode 110 (keysym 0xff50, Home), same_screen YES,
    state 0x0, keycode 115 (keysym 0xff57, End), same_screen YES,
    state 0x0, keycode 115 (keysym 0xff57, End), same_screen YES,
    state 0x0, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,


В иксах вне терминала работают кнопки, например в gedit или в браузере? если правильный алиас и работают не в терминале, то а) удали что понаписывал с input.conf, б) покажи tset -q из нескольких разных терминалов — xterm, gnome-terminal например, и в) работает ли в тмуксе, и что в нем в TERM. что в termcap и terminfo по этим терминалам?

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

проверь через xev | grep keysym или при нажатии иксы правильный алиас назначают — у меня например так:

У меня такой же выхлоп

В иксах вне терминала работают кнопки, например в gedit или в браузере?

Да, все работает отлично.

удали что понаписывал с input.conf

Это в новом файле /etc/udev/hwdb.d/70-keyboard.hwdb который перезаписывает /etc/inputrc ? Удалил.

покажи tset -q из нескольких разных терминалов — xterm, gnome-terminal например

И в том и в том терминале одно и то же: xterm-color

работает ли в тмуксе, и что в нем в TERM. что в termcap и terminfo по этим терминалам?

Вот с этим не до конца разобрался(

dimdiden
() автор топика
Ответ на: комментарий от dimdiden

окей, значит будем делать так: тестировать дальше будем в gnome-terminal, удали все что добавил в xresources, покажи cat .inputrc, cat /etc/inputrc, infocmp $TERM в нем. нажми control-v, отпусти, нажми Home. увидишь что-то типа ^[[H. повтори то же для End, покажи что конкретно вывело тебе на экран. можешь заодно сделать то же в xterm и urxvt, по идее везде должно быть одно и то же. какой у тебя шелл, кстати? keycode в xev'е у тебя такой же как у меня был? просто в шелле если нажать хоум, енд, то на начало командной строки и в конец курсор прыгает? это самая простая проверка readline. в vim'е или mc работают кнопки? я правильно понимаю что в чистой консоли у тебя все это работает, и ни в одном эмуляторе терминала в иксах не работает, но работает во всех других приложениях в иксах? и так было всегда?

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

удали все что добавил в xresources

Закомментил такие записи:
#URxvt*termName: rxvt-unicode
#URxvt.keysym.Home: \033[7~
#URxvt.keysym.End: \033[8~
#URxvt.keysym.KP_Home: \033[7~
#URxvt.keysym.KP_End: \033[8~

покажи cat .inputrc, cat /etc/inputrc

.inputrc не создан
в /etc/inputrc:

# do not bell on tab-completion
#set bell-style none

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on

$if mode=emacs

# for linux console and RH/Debian xterm
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[7~": beginning-of-line
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word

# for rxvt
#"\e[8~": end-of-line

# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line
$endif

infocmp $TERM

#	Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-color
xterm-color|nxterm|generic color xterm,
	am, km, mir, msgr, xenl,
	colors#8, cols#80, it#8, lines#24, ncv@, pairs#64,
	acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
	bel=^G, bold=\E[1m, clear=\E[H\E[2J, cr=^M,
	csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
	cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
	cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
	dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
	el=\E[K, enacs=\E)0, home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL,
	il1=\E[L, ind=^J,
	is2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8, kbs=^H,
	kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
	kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~,
	kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
	kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
	kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~,
	kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
	kfnd=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~,
	kslt=\E[4~, meml=\El, memu=\Em, op=\E[m, rc=\E8, rev=\E[7m,
	ri=\EM, rmacs=^O, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l,
	rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m,
	rs2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8, sc=\E7,
	setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[m, smacs=^N,
	smcup=\E7\E[?47h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m,
	smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
	u8=\E[?1;2c, u9=\E[c,

нажми control-v, отпусти, нажми Home. увидишь что-то типа ^[[H. повтори то же для End, покажи что конкретно вывело тебе на экран

^[[7~ для home
^[[8~ для end

какой у тебя шелл, кстати

bash

keycode в xev'е у тебя такой же как у меня был?

Такой же как у тебя

просто в шелле если нажать хоум, енд, то на начало командной строки и в конец курсор прыгает? это самая простая проверка readline. в vim'е или mc работают кнопки? я правильно понимаю что в чистой консоли у тебя все это работает, и ни в одном эмуляторе терминала в иксах не работает, но работает во всех других приложениях в иксах?

Работает все отлично, прыгает в начало/конец комманды, в виме тоже. И в чистой и во всех эмуляторах. Не работает только в less (и только в эмуляторах), коим я просматриваю многогиговые логи, прыгая в начало/конец лога. Эта проблема фиксится только если указываю в .lesskey. Но это только на локальной машине. Если зайти куда то по ssh, там уже не работает.
Спасибо что помогаете

dimdiden
() автор топика
Ответ на: комментарий от dimdiden

твои результаты don't make sense. что-то глубоко не так.

Закомментил такие записи:

нет, не заккоментировал. символ комментария в xresources — ! (знак восклицания). кроме того, хочу напомнить что xrdb -merge не удалит уже установленные ресурсы. чтобы нормально все сделать и точно не ошибиться, удали совсем (трудно чтоли потом назад внести) и перезагрузись (достаточно рестарта иксов).

в /etc/inputrc:

окей, все стандартно, все нормально.

infocmp $TERM

твой терминал, как и положено xterm-color, ожидает ^[[H и ^[[F. но твой эмулятор терминала посылает ^[[7~ и ^[[8~. это в rxvt ты проверил, или в gnome-terminal, как я просил? если в rxvt, то не удивительно, ведь ты его так настроил через xresources. если gnome-terminal/xterm, то это более чем странно. ты мог бы подправить terminfo (на арчевики расписано как) но это опять-таки будет только локально работать. причем, лесс использует libcurses, а ты говоришь что другие курсес приложения работают…

я вообще ничего не понимаю: ядро правильно понимает аппаратное нажатие, правильно маппит его на home, 47 и 4f это вообще дефолтные сканкоды, у меня например такие же. иксы потом правильно маппят ите keycodes в алиасы. но почему-то эмуляторы терминала посылают неправильные комбинации. readline их все равно хавает, потому что по дефолту знает и про такой вариант тоже. приложения опирающиеся на терминфо не должны бы работать, но работают! все, кроме less.

единственное что меня смущает (помимо вопроса почему эмуляторы терминала посылают esc-7 и 8) это вывод showkeys у тебя. там реально «^[[7~0xe0 0x47» при нажатии home? должно быть просто «0xe0 0x47». я вообще не понимаю как такой вывод может получиться, ведь showkeys показывает сканкод напрямую.

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

хммм. может у тебя клавиатура посылает больше одного байта? и все обрабатывают либо первый, либо последний — кроме лесс? если в шелле, запущеном в gnome-terminal, нажать по очереди: ctrl-v, home, ctrl-v, home, где будет курсор — в конце строки или в начале?

еще, навсякий случай, что с локалью? env | grep -i lang?

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

я понял. ты ведь showkey в иксах запустил, да? в консоли его надо запускать. проверь там еще раз теперь. e047 -> e0c7 и e04f -> e0cf это стандартные сканкоды из так называемого scan code set 1. мне сложно представить что твоя клавиатура посылает что-то другое.

val-amart ★★★★★
()
Ответ на: комментарий от dimdiden

Все, проблема решена. Было в .bashrc:
export TERM=«xterm-color»
Убрал, и добавил а .Xresources:
URxvt*termName: rxvt-256color
И заработало. Большое всем спасибо за помощь.

dimdiden
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.