LINUX.ORG.RU

Некорректно работает кейбиндинг Gnome3

 , ,


0

1

Всем привет! Ситуация следующего характера: у меня есть скрипт, который позволяет не вводить пароль, а тупо нажать комбинацию клавиш. Скрипт вот:

#!/bin/bash
xvkbd -xsendevent -text "password"
xvkbd -xsendevent -text "\[Return]"

Суть, думаю, предельно ясна. На работе стоит cinnamon (debian 9.3), там в настройке Клавиатуры указал путь до скрипта, комбинацию клавиш и вуаля - работает везде и всюду

Но в случае с домашним гномом 3 (arch linux) что-то пошло не так - бинд через Параметры - Клавиатура отказывается работать в любом эмуле терминала, будь то guake \ gnome-terminal \ terminator. Зато в текстовике, например, в notepadqq, приспокойненько работает. Кто-нибудь сталкивался с подобным и как это можно пофиксить?

Заранее спасибо!



Последнее исправление: oxionex (всего исправлений: 1)

xvkbd -xsendevent -text "password"

Полагаю, что проблема в этом: Firefox в полноэкранном режиме (комментарий)

Решить можно, только убрав ключ xsendevent. После этого должно заработать, но только тогда, когда окно ввода пароля имеет фокус. Если фокус не у него, тогда не сработает.

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

Сработало, да не совсем. Теперь выдает такой текст:

ыыword

Либо зацикливается на Return, выполняя его бесконечное кол-во раз. Есть еще варики?

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

ыыword

Хм. А не стоит приблуд типа xneur, которые раскладку автоматом меняют? Или xvkbd жмет какие-то модификаторы. Это я пока предполагаю.

Либо зацикливается на Return, выполняя его бесконечное кол-во раз. Есть еще варики?

Это вообще не ясно. А если вместо xvkbd вомпользоваться xdotool, то аналогичная проблема?

xdotool type password
xdotool key Return
Zubok ★★★★★
()
11 октября 2018 г.
Ответ на: комментарий от Zubok

Собственно, попробовал уже и на Cinnamon. В данном случае спокойно работают команды в изначальном виде, т.е.:

xvkbd -xsendevent -text "password\[Return]"

Но ни в одном эмуляторе терминала все равно не работает.

При:

xvkbd -text "password\[Return]"

Выдача:

зфыыцщкв
ssword
ыцщкв
ssword
фыыцщкв
assword
sцщкв

Пробовал выставлять в guake \ terminator «Фокусироваться, если открыт» - бестолку

xdotool вообще не заводится

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

Я предполагаю, что это может быть связано со скоростью появления символов. Такое ощущение, что первые символы окно просто игнорирует. А если увеличить таймаут между символами для примера? Бухнем сразу 400 мс.

xdotool type --delay 400 password

Стабильнее получается.

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

Короче, я понял, кажется. Ему нужен таймаут *перед* xdotool. После перехвата горячей клавиши оконный менеджер не успевает передать фокус ввода окну терминала, по всей видимости. Поэтому события виртуальной клавиатуры уходят в никуда.

Но если правильно делать, то хорошо бы иметь событие, которое позволяет точно узнать, что окно фактически уже принимает нажатия кнопок. Почему-то xdotool getactivewindow windowfocus --sync type password не срабатывает, все равно проглатываются первые символы, а вот, скажем, тупое sh -c 'sleep 1; xdotool type password' работает. Надо подумать.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
25 января 2019 г.
Ответ на: комментарий от oxionex

Ох, времени-то сколько прошло! Я уже и забыл, что тут обсуждали, но еще раз пробежался глазами. Свежее предположение: надо на время передачи строчки сбросить модификаторы. Мысль такая: когда ты жмешь комбинацию, то в этот момент у тебя зажаты модификаторы, строчка пересылается в их контексте. Поэтому предполагаю, что и происходит спонтанное переключение раскладки с английской на русскую. Когда ты делаешь таймаут, то строчка передается уже после отпускания комбинации, поэтому уже нормально срабатывает. Пока предположение, но попробуй такое еще:

xdotool type --clearmodifiers password

Работает или тоже глючит?

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

Стер предыдущий комментарий. Вообще-то даже как-то работает, но если честно, то странно немного, поэтому надо доразбираться. Сильно зависит от того, какая комбинация назначена на команду.

У меня четко видно, что если у меня комбинация Super+k, например (Super - это у меня WinKey), то строчка password срабатывает в контексте Super, то есть Выдаются комбинации Super+p, Super+a... и вместо строчки у меня управляет окнами и запуском приложений (у меня модификатор Super выполняет все задачи оконного менеджера и запуск приложений). Как только я указываю --clearmodifiers, то вроде работает.

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