LINUX.ORG.RU

Идиотизм под названием кнопка copilot

 , , ,


0

2

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

left meta down
left shift down
f23 down
left meta up
left shift up
f23 up

А при отжатии ничего не генерируется! Как эту кнопку переназначать, когда отжатие никак не отследить? Почему бы тупарям из майкрософта просто не взять f23? Тогда можно было бы просто переназначить f23 на right ctrl. А теперь же пришлось написать вот такой конфиг для keyd, чтобы хоть как то эту дебильную кнопку задействовать:

[ids]
*

[global]
oneshot_timeout = 500

[main]
leftmeta+leftshift+f23 = oneshot(control)
rightshift = rightshift
space = overload(control, space)

Смысл здесь в том, чтобы при нажатии на copilot активировался слой control на полсекунды, в течении которых можно интерпретировать copilot+c как ctrl+c, например. Так же теперь переучиваюсь использовать пробел как ctrl, чтобы в будущем не зависеть от придурков из майкрософта.

А в идеале хотелось бы, чтобы в ядре была специальная поддержка этой кнопки. Но может быть это даже никак невозможно.

★★★★★

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

Извините, не совсем понимаю в чем вопрос.

Я по сути использую очень много клав и мышей у себя и разных людей. Они все отличаються какими доп. кнопками. Но я на них не нажимаю. Как появился gnome-shell стал жать еще доп. кнопку win-key. Мало ли кнопок разных …

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

Но, вроде, в спецификации USB нету длинных сканкодов.

А при чём тут спецификация USB? Во-первых, не важно где именно оегаси-сканкоды генерятся, даже в старых компах что я на этот счёт смотрел, это делала не клавиатура, хоть и умела, а 8042-совместимый контроллер её интерфейса на материнке (было сюрпризом обнаружить это когда пытался перевести клаву в нативный режим чтобы видеть нормальные сканы, а она и так была в нём, но сканы XT). Во-вторых, спецификация USB никак не может мешать слать через него виртуальные хоть 10 кликов при нажатии одной настоящей кнопки - ведь она описывает интерфейс, а не логику работы устройства.

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

При touch typing надо использовать модификаторы на противоположной стороне. То есть популярные C-c/C-v/C-x должны нажиматься с правым Ctrl.

anonymous
()
Ответ на: комментарий от firkax

При том, что спецификация USB вышла позже, чем AT-клавиатура и от нескольких режимов генерации скан-кодов, F13=Shift+F1 и пр. отказались. Одна клавиша — один сканкод.

где именно оегаси-сканкоды генерятся,

Для DOS не важно, а новые ОС работают с USB-клавой напрямую, им не важно, что там когда-то генерила Pause.

она описывает интерфейс, а не логику работы устройства.

Тут не про логику работы устройства, а про логику развития стандартов. Сделали когда-то хитрый Pause, причём, ЕМНИП, там ещё клавиатура сама обрабатывала, просто Pause нажата или с модификаторами (Ctrl, Shift) и меняла посылку. И сделали хитрый Pause для совместимости с XT. И на тот момент 640 кБайт нехватало никому, какие-то сложные раскладки клавиатуры, нестандартное назначение клавиш в драйвере/резиденте сожрали бы ещё байты, а и так приходилось мудрить с autoexec.bat, чтобы какая-нибудь прога, требующая 592 кБайт ОЗУ запустилась. На этом фоне большинству было без разницы, что Pause какая-то особенная.

А потом, вернулось в нормальное русло, Микрософт для клавиш Win спокойно дала обычные (и при этом разные) скан-коды (правый/левый), не стала придумывать какое-то извращение. Из USB 1.1 выкинули 3 режима сканкодов AT-клавиатуры. А copilot, получается, шаг назад.

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

У паузы генерилось аж 6 байт сканкодов (три для нажатия двух кнопок, три для отпускания - специальный модификатор, ctrl, numlock)

Эта последовательность генерилась для существующего софта. Хотя на 83-клавишной клавиатуре на NumLock сбоку ничего написано не было, но в оф. документации от IBM было, что нужно использовать Ctrl+NumLock для остановки вывода программы. Для софта, существующего на момент появления клавиши Pause, последовательность E1,1D,45, E1,9D,C5 означала: отжата неизвестная клавиша, нажат Ctrl (он тогда был одни), нажат NumLock, отжата неизвестная клавиша, отжат Ctrl, отжат NumLock. А более свежий софт воспримал E1 не как «отжата неизвестная клавиша», а как Pause.

И, аналогично, для старого софта Ctrl+Pause=Ctrl+Break, воспринималось как отжатие неизвестной клавиши и нажатие ScrollLock. Так как Ctrl+ScrollLock и был Break в XT-клавиатуре, там даже сбоку на ScrollLock было написано Break.

С учётом того, что в то время программы сами обрабатывали нажатия клавиш, без всяких драйверов и прочих прослоек, то вполне нормальное решение. И все остальные «расширенные» скан-коды, которые с E0, аналогично построены. Чтобы старый софт игнорировал E0, а без оставшийся сканкод максимально совпадал у уже существующим — R-ctrl=1D, L-ctrl=E0,1D.

А клавиша copilot в эту логику не лезет, никто на ноутах до её введения не нажимал meta+shift+f23 для ИИ в win11.

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

При том, что спецификация USB вышла позже, чем AT-клавиатура и от нескольких режимов генерации скан-кодов, F13=Shift+F1 и пр. отказались. Одна клавиша — один сканкод.

Я ж дальше расписал что в AT-клавиатурах этот режим по факту тоже не использовался, хоть и был реализован. Они работали именно в нативном режиме, а легаси-поддержку продублировали в чипсет. Сейчас её вместо чипсета засунули в биос, разница не особо большая.

причём, ЕМНИП, там ещё клавиатура сама обрабатывала, просто Pause нажата или с модификаторами (Ctrl, Shift) и меняла посылку

Да, ну или чипсет.

Микрософт для клавиш Win спокойно дала обычные (и при этом разные) скан-коды (правый/левый)

Потому что эти кнопки не использовались для эмуляции других комбинаций.

А клавиша copilot в эту логику не лезет, никто на ноутах до её введения не нажимал meta+shift+f23 для ИИ в win11.

А, ну наверно, особенно учитывая что F23 нигде нет. Тогда да, странное решение. Разве что может почему-то нельзя было доп. сканкод вводить.

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

Я ж дальше расписал что в AT-клавиатурах этот режим по факту тоже не использовался, хоть и был реализован. Они работали именно в нативном режиме, а легаси-поддержку продублировали в чипсет.

Вы это проверяли на самых первых IBM PC AT, которые были без чипсетов, на кучи мелких микросхем, так что у них мат. плата была больше, чем у XT?

Плюс, там решалась задача больше, чем новые клавиши только для AT. Те, древние, первые AT-клавиатуры имели физический переключатель XT-AT, так как физический протокол у AT и XT разный, хоть разъём клавы одинаковый. И AT клавиатура в физическом режиме XT софтово не переключалась в разные скан-коды, просто отправляла в IBM PC XT набор скан-кодов AT set 1. И XT-шки таким образом работали со 101 клавишной клавой.

На форуме микрософта уже год назад возмущались, что почему у свежекупленого лаптопа вместо правого Ctrl этот самый copilot, которые нельзя отмапить в Ctrl. Только с т.з. мелкомягкий эта клавиша отправляет Shift+WinKey+F23. А ещё написано, что если этой кнопки нет, то нужно нажимать WinKey+C. И тут совсем какая-то зазеркальная логика. Делаем клавишу, которая по сути шоткат, а не полноценная клавиша, но вешаем на неё не WinKey+C, а ...+F23.

Ну, а касательно:

нельзя было доп. сканкод вводить.

тоже не знаю, но, вроде, раньше выпускали очередную версию Microsoft Keyboard Scan Code Specification и пофиг. Да и в USB определено такое кол-во сканкодов, на все случаи жизни, что можно было что-то вытащить, допустим «Keypad XOR» или «Keypad @». А после того, как мелкомягкие задействовали бы какой-то существюущий скан-код под copilot, дак стандарты бы подправили :)

mky ★★★★★
()