Горячие клавиши прекращают работать периодически

править: Как видно из ответа, этого резервного устройства, к которому на самом деле не имеют никакого отношения, или спящего режима, а скорее что это коррелировало со мной часто закрытие окна приложения (который инициировал ошибку) перед входом в резервное устройство большую часть времени.

Я видел, что несколько человек сообщают об этом в различных местах в сети без любого решения, но думал, что добавил бы мой в любом случае:

Очень часто, после возврата компьютеру через какое-то время (когда это вошло в резервное устройство), я замечаю, что некоторые ярлыки прекратили работать. Это не только происходит в терминале, но также и в Chrome (Ctrl-L, Ctrl-R, F5 вся работа остановок). Это также не влияет на весь ctrl-shortcuts: Ctrl-C все еще работает, например (слава Богу!).

Есть ли какой-либо способ отладить это? Испытание xev ранее не получил меня нигде, но возможно существует некоторый способ узнать то, что препятствует тому, чтобы мои нажатия клавиш достигли программ?

править: Я вижу что-то странный случай с Ctrl-R

Что-то захватывает сочетание клавиш!

Вывод, полученный от xev

KeyPress event, serial 37, synthetic NO, window 0x5200001,
    root 0xee, subw 0x0, time 24547557, (-130,529), root:(0,633),
    state 0x10, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

FocusOut event, serial 37, synthetic NO, window 0x5200001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 37, synthetic NO, window 0x5200001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 37, synthetic NO, window 0x0,
    keys:  4294967278 0   0   0   0   0   0   0   0   0   0   0   0   2   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeyRelease event, serial 37, synthetic NO, window 0x5200001,
    root 0xee, subw 0x0, time 24548550, (-130,529), root:(0,633),
    state 0x14, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Сравните это с Ctrl-C

мы можем легко видеть, что четыре логических события происходят здесь

KeyPress event, serial 37, synthetic NO, window 0x5200001,
    root 0xee, subw 0x0, time 24724066, (572,852), root:(702,956),
    state 0x10, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x5200001,
    root 0xee, subw 0x0, time 24724818, (572,852), root:(702,956),
    state 0x14, keycode 54 (keysym 0x63, c), same_screen YES,
    XLookupString gives 1 bytes: (03) ""
    XmbLookupString gives 1 bytes: (03) ""
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x5200001,
    root 0xee, subw 0x0, time 24724966, (572,852), root:(702,956),
    state 0x14, keycode 54 (keysym 0x63, c), same_screen YES,
    XLookupString gives 1 bytes: (03) ""
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x5200001,
    root 0xee, subw 0x0, time 24725339, (572,852), root:(702,956),
    state 0x14, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False
3
задан 17 June 2017 в 13:18

1 ответ

Мне удалось найти самого маловероятного преступника: Козлиное приложение Messenger. ! Это могло также произойти со многими другими заявками, поданными с Электронной платформой (Spotify, Atom, VS Code) до , ошибка в библиотеке ярлыка исправлена.

я теперь знаю, как последовательно воспроизводить ошибку после чтения отчета об ошибках на электронной системе отслеживания ошибок : просто закройте приложение так, чтобы оно просто находилось в системном лотке. Но прежде чем я добрался там, мне удалось найти неопровержимое доказательство, что это было Козлино, который получал ярлык и что уничтожение его решило проблему. Это - то, как я узнал (может использоваться для аналогичных ситуаций):

А несколько непрозрачный ответ на дублирующийся вопрос этого объяснил, что было возможно обнаружить, какое приложение захватывало ключи путем издания некоторых волшебных нажатий клавиш. Сначала я не понял вполне, как настроить все это, думая, что я должен был пройти все виды обручей (смешивающий с конфигурацией Xorg, отключив vty переключение, ++) для установки специальной конфигурации keymapping, пока это не рассветало на мне, которого на самом деле также описал ответ, как инициировать эти сочетания клавиш программно!

, Таким образом, все, что я должен был сделать, открывало два окна терминала. В первом окне терминала я начал регистрировать события в системе Xorg:

tail -f /var/log/Xorg.0.log > out.txt

В другом окне я инициировал события, которые испустили сочетания клавиш к системе Xorg:

KEY="ctrl+r"                  # the combination that was "grabbed"
xdotool keydown ${KEY};       # start pressing the key combo
xdotool key XF86LogGrabInfo;  # the keysym that when emitted asks X to print info on the grabber of the current keys
xdotool keyup ${KEY}          # stop pressing the key combo

Выполнение этого программно как это было намного легче, чем выполнение его вручную как разветвитель пальца :-) В конечном счете журнал, полученный в другом окне (13'000 строк!) интересные биты были очевидны в первых нескольких строках:

[ 24264.517]     detail 71 (mask 0), modifiersDetail 128 (mask 0)
[ 24264.517]     device 'Virtual core keyboard' (3), modifierDevice 'Virtual core keyboard' (3)
[ 24264.517]     core event mask 0x3
[ 24264.517]     owner-events false, kb 1 ptr 1, confine 0x0, cursor 0x0
[ 24264.517]   Printing all registered grabs of client pid 5643 /opt/Caprine/caprine --type=gpu-process --no-sandbox --supports-dual-gpus=false --gpu-driver-bug-workarounds=1,7,23,59,71 --gpu-vendor-id=0x8086 --gpu-device-id=0x5916 --gpu-driver-vendor --gpu-driver-version --gpu-driver-date --service-request-channel-token=B68A5099B5760C39675F51019B3D4F7A --v8-natives-passed-by-fd --v8-snapshot-passed-by-f 
[ 24264.517]   Printing all registered grabs of client pid 5643 /opt/Caprine/caprine --type=gpu-process --no-sandbox --supports-dual-gpus=false --gpu-driver-bug-workarounds=1,7,23,59,71 --gpu-vendor-id=0x8086 --gpu-device-id=0x5916 --gpu-driver-vendor --gpu-driver-version --gpu-driver-date --service-request-channel-token=B68A5099B5760C39675F51019B3D4F7A --v8-natives-passed-by-fd --v8-snapshot-passed-by-f 
[ 24264.517]   Printing all registered grabs of client pid 5684 /usr/lib/slack/slack --disable-gp 
[ 24264.517]   Printing all registered grabs of client pid 5684 /usr/lib/slack/slack --disable-gp 
[ 24264.517]   Printing all registered grabs of client pid 18336 xdotool key XF86LogGrabInfo
[ 24264.517] End list of registered passive grabs
[ 24308.177] (II) Printing all currently active device grabs:
[ 24308.177] Active grab 0x44800160 (core) on device 'Virtual core keyboard' (3):
[ 24308.177]       client pid 5614 /opt/Caprine/caprine 
[ 24308.177]       at 24308139 (from passive grab) (device thawed, state 1)
[ 24308.177]         core event mask 0x3
[ 24308.177]       passive grab type 2, detail 0x1b, activating key 27
[ 24308.177]       owner-events false, kb 1 ptr 1, confine 0, cursor 0x0
[ 24308.177] (II) End list of active device grabs

После уничтожения Козлиного, я мог наконец начать использовать Ctrl-R в терминале снова, чтобы сделать обратные поиски истории, а также обновить Chrome! xev также производит что-то очень отличающееся от того, что я детализировал в вопросе, теперь будучи очень похожим на вывод от Ctrl-L:

KeyPress event, serial 39, synthetic NO, window 0x5200001,
    root 0xee, subw 0x0, time 25356738, (917,877), root:(1047,981),
    state 0x10, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 39, synthetic NO, window 0x5200001,
    root 0xee, subw 0x0, time 25357181, (917,877), root:(1047,981),
    state 0x14, keycode 27 (keysym 0x72, r), same_screen YES,
    XLookupString gives 1 bytes: (12) ""
    XmbLookupString gives 1 bytes: (12) ""
    XFilterEvent returns: False

KeyRelease event, serial 39, synthetic NO, window 0x5200001,
    root 0xee, subw 0x0, time 25357315, (917,877), root:(1047,981),
    state 0x14, keycode 27 (keysym 0x72, r), same_screen YES,
    XLookupString gives 1 bytes: (12) ""
    XFilterEvent returns: False

KeyRelease event, serial 39, synthetic NO, window 0x5200001,
    root 0xee, subw 0x0, time 25357710, (917,877), root:(1047,981),
    state 0x14, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

редактирование: Складывается , ошибка известна

, проблема ошибки также показывает, как последовательно воспроизводить, это (минимизирует). Это было вызвано ошибкой в электрон-localshortcut библиотека.

<час>

Сделанный маленький util для легкой отправки этих ярлыков программно.

4
ответ дан 1 December 2019 в 15:51

Другие вопросы по тегам:

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