LINUX.ORG.RU

Вопрос о Линукс и апаратной клавиатуре юникод (обсуждение)

 , ,


0

1

Мой первый пост, если закинул не туда, скажите сразу и раскажите как переместить куда надо.

В общем есть идея сделать себе клавиатуру, и не абы какую, а с собственной раскладкой(ми) нестандартным расположением кнопок и 4 языками и так чтобы она была компьютерноНЕзависимой. Технические способности и возможности позволяют.

Т.к. у меня нет желания устанавливать на каждой машине с линукс свои конфиги для моей клавиатуры, долго и муторно, да и не правильно это. Проще таскаться со своей клавой, как по мне, своё роднее. Я начал искать информацию.

Нашёл пару статеек.

Первая: http://citforum.ru/operating_systems/linux/user/gl-09/gl_09_03.shtml

Вторая: http://rus-linux.net/MyLDP/BOOKS/programming-ground-up/02/groundup-ru-02-07-0...

В первой есть намёк на такую штуку как K_UNICODE, но дальнейшие гугление ничего не дало, каюсь плохо гугли, скорее всего, но отсутствие в выдаче на первых страницах уже говорит о непопулярности такого. Во второй, уже есть более рабочий способ, и скорее всего более распространённый. Это ввод юникодсимволов с помощью CTRL+SHIFT+U+U_СODE.

Идея, сделать клавиатуру которая при нажатии на клавишу будет генерировать такой код и отправлять как escape последовательность. Естественно раскладка будет выбираться на стороне клавиатуры, и допустим выводится на символьный экран встроенный в клавиатуру, будет ещё переключатель который будет переключать между стандартным режимом и моим, поэтому в биос я попаду, если потребуется =) А сама таблица раскладки будет хранится на сд карте, поэтому если надо можно будет добавить ещё или отредактировать.

Внимание вопросы и приглашение к обсуждению, насколько это универсальное решение? На всех ли популярных линукс дистрах распространена эта комбинация? такая последовательност сильно ли грузит систему? Будет ли задержка при вводе? Какие подводные? И оцените идею в общем.

с собственной раскладкой(ми)

Ты, наверное, ещё не в курсе, что USB HID — это всего 256 сканкодов, да?

при нажатии на клавишу будет генерировать такой код и отправлять как escape последовательность

То есть генерировать последовательность сканкодов, которые в разных ОС будут обрабатываться по-разному (и обрабатываться всегда по отдельности каждый).

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

Речь идёт только о линукс(среди популярного {основаные на дебиан или убунту, бсд тоже интересует}) виндовс и что-нибудь экзотическое в пролёте, для них будет стандартный режим.

doperst ()
Ответ на: комментарий от mord0d

Я знаю что, такое сканкоды, и представляю как они устроены. Ты наверное не поверь, но твоя клавиатура отправляет 11 (если не изменяет память) сканкодов, на одну клавишу принтскрин, например.

doperst ()

есть более рабочий способ, и скорее всего более распространённый. Это ввод юникодсимволов с помощью CTRL+SHIFT+U+U_СODE.

Это только в терминале.
В гуёвых текстовых редакторах оно не работает.

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

В НЕКОТОРЫХ гуёвых текстовых редакторах оно не работает.
(как тут редактировать своё сообщение?)

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

И нет возможности включить эту опцию глобально? Например установив доппакет/драйвер?

doperst ()

Только добрался до своего компа, линукс минт 19.3, в принципе работает, переименовываются папки и файлы(если сначала нажить шифт, а после контрол), в либраофис, стандартном блокноте, браузере и консоли пашет. Блокнот из винды, который идёт в наборе с вайн, не рибит. Вопрос всё ещё открыт, кто может дайте фитбек по остальным дистрам.

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

Речь идёт только о линукс(среди популярного {основаные на дебиан или убунту, бсд тоже интересует})

Это никак не влияет на работу клавиатуры.

но твоя клавиатура отправляет 11 (если не изменяет память) сканкодов, на одну клавишу принтскрин, например

А вот и нет.

И вообще, сканкод — это представление данных, отправляемых клавиатурой. Клавиатура отправляет несколько байт (в зависимости от количества модификаторов и "символа").

ввод юникодсимволов с помощью CTRL+SHIFT+U+U_СODE

Компьютером (а точнее драйвером USB HID) это будет распознано как последовательность:

Ctrl Pressed
Shift Pressed
U Pressed
U_CODE Pressed
U_CODE Released
U_CODE Pressed
U_CODE Released
...
U_CODE Pressed
U_CODE Released
U_CODE Pressed
U_CODE Released
U Released
Shift Released
Ctrl Released

Никаких символов не отправляется, и каждая отдельная софтина будет по-своему реагировать на аккорды.

Для начала посмотри как работает переусложнённая достаточно продвинутая прошивка для клавиатуры — QMK.

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

Спасибо за ссылку.

А вот и да. Не 11, а 5. Что тоже достаточно чтобы выбиваться из общего фона. https://ru.m.wikipedia.org/wiki/Скан-код

Так я и не хочу чтобы компьютер как-то влиял на мою клавиатуру. Между клавишами и компьютером будет находится моя прошивка для клавиатуры. И я думаю сумею написать иф-элсе для моментов когда я просто нажимаю клавишу с буквой или шифт+буква, чтобы отправить пирог из сканкодов, от допустим контрол+с, чтобы отправить просто контрол+с.

doperst ()
Ответ на: комментарий от mord0d

Я наверное не достаточно описал тз и мои побуждения на такое решение?

Давай, я попробую объяснить не с технической точки зрения, а саму хотелку в вакууме.

Смотри, передомной клавиатура сделанная мной, на клавиатуре обычно 6 рядов, да? (ескейп + F, цифровой, три буквенных, и спейс ряды), слева от них будет находиться 6 клавиш в столбик назовём этот ряд L (от слова layer), по аналогии с F рядом, Допустим на Л1 кнопке, у меня стандартная раскладка, Л2 русский, Л3 английский, Л4 украинский, Л5 немецкий, Л6 спецсимволы. Вот я сажусь за незнакомую мне машину, сервер в текстовом режиме или комп друга не важно, и единственное что я могу сделать это нажать Л1, чтобы установить на компьютере! английскую раскладку, и если нужно каким-то образом если этого нет включить ввод по ктрл+шифт+ю+ю_код, (для винды вообще можно свой пунтосвитчер таскать, благо она в этом проще, нужен только портабл ехе), а дальше уже пользоваться своей богоклавиатурой и и вообще не думать какие языки есть в системе, как они переключаются между собой и в каком режиме, какая рассадка, может я вообще двораком пользуюсь, всё что я требуется от системы это переводить мои escape последовательности. Вот и вопрос, я зажрался или всё-таки это возможно, пусть и придётся ставить ехе или деб пакет, т.к. это НАМНОГО проще, чем лезть в конфиги, и контрол+шифт+ю даже если я не удалю, никому не будет мешать, т.к. это слишком специфичная вещь, а может и спасибо скажут, т.к. если запомнить пару цифр можно и уродские смайлы быстрее вводить в той же вкашечке.

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

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

https://ru.m.wikipedia.org/wiki/Скан-код

Я тебе про USB HID, ты тащишь ссылки про AT (который де-факто мёртв). УПРЛС?

По поводу остального вначале подтяни матчасть, а потом приходи.

я попробую объяснить не с технической точки зрения

Ну так технического у тебя и не было. Ты даже не знаешь с какой стороны подходить к тому, что ты нагуглил.

Допустим на Л1 кнопке, у меня стандартная раскладка, Л2 русский, Л3 английский, Л4 украинский, Л5 немецкий, Л6 спецсимволы.

Повторяю для тех, кто в танке: клавиатура не передаёт символы, а то, что она передаёт, может восприниматься компьютером/ОС/окружением/софтом по-разному.

чтобы установить на компьютере! английскую раскладку

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

для винды вообще можно свой пунтосвитчер таскать, благо она в этом проще, нужен только портабл ехе

  • Там может оказаться ограничение на чтение/запуск с внешних носителей;
  • Там может быть полный запрет на монтирование внешних носителей;
  • Там может быть whitelist на подключаемые устройства (и пойдёшь ты лесом со своей клавиатурой).

Да и не только в Windows ты можешь столкнуться с такими ограничениями.

и вообще не думать какие языки есть в системе

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

может я вообще двораком пользуюсь

А я не может им пользуюсь, и у меня на клавиатуре есть возможность переключиться в него хардварно.

всё что я требуется от системы это переводить мои escape последовательности

И ты думаешь, что "прошивка" как-то решит твою хотелку?

пусть и придётся ставить ехе или деб пакет

Нет, придётся писать свой протокол и драйвер. А для своего протокола тебе придётся и железку рожать.

нужен инструмент, который минимально затрагивает машину

Для этого твой "инструмент" должен быть master, но он slave.


Подводя итоги: Хотелки у тебя большие, а знаний ноль, ты совсем не понимаешь, как это всё работает.

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

Сканкоды для АТ и для ЮСБ различаются, но они есть.

Проведи эксперемент сам Набери в консоли showkey --scancodes и ты увидишь что? Правильно сканкоды usb hid!

По поводу раскладки, если ты способен писать в консоли с клавиатуры и выполнять команды, то она как бы уже есть, ок да? И ты хоть раз видел где есть локализованная раскладка, которая не установлена рядом с английской, тем более на линукс?

Чтобы обойти установку дополнительной раскладки я и хочу воспользоваться функцией набора юникодсимволов через хоткеи. А если там не будет таких шрифтов, как ты привёл в пример арабский, то скорее всего он мне и не понадобится.

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

И ты думаешь, что «прошивка» как-то решит твою хотелку?

Естественно решит, если мне вместо ктрл+шивт+ю+код достаточно нажать клавишу на которой у меня нарисован символ Ї, а контролер передаст ктрл+шивт+ю+0+4+0+7.

Хотелки у меня очень большие. ;)

doperst ()
Ответ на: комментарий от mord0d

Я видел китайская полноразмерная клавиатура как-то работает, они это софтом решают? По-моему там вообще PS/2 было.

anonymous ()

Вангую, что всё-таки придётся дополнительно эмулировать флешку с софтом для пэка.

Deleted ()

компьютерноНЕзависимой

Это как?

нет желания устанавливать на каждой машине с линукс свои конфиги

Ты поменяешь конфиги на драйвера. Действительно универсального решения для несуществующей проблемы, собственно, не существует.

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

Это как?

Так, что значение клавиши будет и её внутренний сканкод будет зависеть от прошивки клавиатуры, а микроконтроллер будет отдавать традиционные сканкоды.

Например, если я захочу поменять местами клавиши таб и капслок, то мне нужно это будет в самой клавиатуре, и когда я нажимаю на капслок, будет отправлятся сканкод таба и наоборот.

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

То есть, ты тогда сможешь реализовать в клавиатуре поддержку профилей вывода в зависимости от окружения на компьютере. Неплохо. Только работы слишком много и оно того не стоит.

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

Нет же. В том то и дело что я не хочу затрагивать, ну или по крайней мере минимально, так чтобы не сломать после себя другие традиционные клавиатуры. Идея сделать клавиатуру с собственной локалью внутри, и со своми конфигами и ремапами и хоткеями.

И сделать так чтобы если я клавиатуре дам сигнал печатать на украинском(белорусском, татарском) она просто будет отправлять сканкоды юникод символов.

doperst ()
Ответ на: комментарий от WitcherGeralt

Мой вопрос и состоит в том, насколько это универсально, смогу ли я допустим, сев перед арчем, просто установить пакет или запустить демон на поддержку ввода юникод-хоткей. Где это может сломаться? И вообще стоит ли дальше обсуждения заходить? Может всплывёт какой-то минус который всё до основания испортит.

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

Так я тебе и говорю, что ты ничего не сломаешь. Есть в системе GTK, ты переключаешь на самой клавиатуре профиль вывода на профиль для GTK, у тебя всё работает. Проблема именно в том, что тебе либо нужно будет реализовать профили вывода для разных окружений на ПК, либо драйвер.

Универсального способа нет. Окружений много и не все поддерживают прямой ввод юникода, а драйвера под каждую операционку тоже придётся писать разные.

Игра не стоит свеч, я считаю. Никому кроме тебя оно не нужно, а тебе самому будет проще копипастить конфиги (тоже мне, выдумал проблему).

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

Да, азиатские раскладки полностью софтварны.

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

Пересылается не символ, а набор команд.
А система уже их обрабатывает и в общем случае вполне может послать тебя на фиг.

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

она просто будет отправлять сканкоды юникод символов.

Вот тут у тебя проблема. У юникод символов нет сканкодов. Есть набор сканкодов интерпретируемый компьютерами однозначно. И в зависимости от параметров окружения один и тот же код у тебя на экране превращается в «W» или в «Ц». Клавиатура на это никак не влияет.

Естественно решит, если мне вместо ктрл+шивт+ю+код достаточно нажать клавишу на которой у меня нарисован символ Ї, а контролер передаст ктрл+шивт+ю+0+4+0+7.

А ты уверен, что окружение умеет в [ctrl]+[shift]+u,0,4,0,7,[Enter]? Смени раскладку в том же эмуляторе термниала и попробуй ввести символ через юникод последовательность, удивишься.

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

Вернёмся к изначальному посылу:

нет желания устанавливать на каждой машине с линукс свои конфиги для моей клавиатуры

Не правильней ли вместо колхозинга клавиатуры, которая в доброй части случаев работать не будет, запилить на флешку скрипт устанавливающий нужные тебе параметры клавиатуры? Не уверен, что сможешь скриптом определить окружение, запили отдельно kde.sh, gnome.sh и console.sh etc

Флешку с пачкой .sh и таскать проще, и работать гарантировано будет на любой системе.

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

Если я правильно понял ТС, то он хочет, чтоб на ПК была вообще одна раскладка, для которой правила ввода юникода устаканены и неизменны, а вот он аппаратно на своём контроллере уже будет её менять.

Идея, конечно, работоспособна, но назачем, собственно?

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

Спасибо, ты понял основную суть. Т_Т Да, на компе я ставлю основную раскладку, английскую, а дальше меняю язык на клавиатуре, хардварно.

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

doperst ()
Ответ на: комментарий от mogwai

А ты уверен, что окружение умеет в [ctrl]+[shift]+u,0,4,0,7,[Enter]?

Некоторые умеют, поэтому меня это и заинтересовало! Выше я уже о минте отписывался.

Смени раскладку в том же эмуляторе термниала и попробуй ввести символ через юникод последовательность, удивишься.

Зачем мне это делать? Если всё что от меня требуется, по предварительной настройке это установить английскую расскладку?

К тому же, в винде точка на цифровом блоке в зависимости от раскладки даёт то запятую то точку.

Вот это меня бесит больше всего, я уже запилил себе раскладки на домашнем и рабочем компе, где все символы аски в независимости от языка на одних и тех же местах. Но когда сажусь за новый комп, это мучение. Даже 15 минут работы превращается в (набор символа <->бекспейс).

да и в целом при смене раскладки на компьютере у тебя и софт переключаться может, например, текстовый процессор может переключать язык абзаца, чтобы спеллчекер не паниковал

Спасибо, об этом не подумал, ну вот видишь, совместными усилиями нашли хоть какой-то обоснованный минус.

Не правильней ли вместо колхозинга клавиатуры, которая в доброй части случаев работать не будет, запилить на флешку скрипт устанавливающий нужные тебе параметры клавиатуры? Не уверен, что сможешь скриптом определить окружение, запили отдельно kde.sh, gnome.sh и console.sh etc

Ну да, и думать что в системе установлено и активно ibus или xkb, и как потом вернуть и не дай бог после меня будет сломано, ну нах.

doperst ()
Ответ на: комментарий от rebforce

Если предполагаемый к использованию компьютер один, на кой заморачиваться с клавиатурой, если конфиг один раз написать и всё?

Если компьютеров несколько и они все твои, что мешает конфиг синкануть? А если компы не все твои, и не ты их контроллируешь, то привет другая локаль, «неправильная» раскладка по умолчанию и интерпретатор не умеющий в ctrl+shift+u.

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

Иного объяснения этому бреду у меня нет:

устанавливать на каждой машине с линукс свои конфиги долго, муторно и не правильно.

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

Ну да, и думать что в системе установлено и активно ibus или xkb, и как потом вернуть и не дай бог после меня будет сломано, ну нах.

Этим же скриптом определить не судьба, чего там используется?) Ровно как и сохранить текущий конфиг, чтобы при отключении твоей флешки оно назад всё вернуло.

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

Пересылается не символ, а набор команд.

Это в AT, в USB HID посылается байт (или несколько байт).

в общем случае вполне может послать тебя на фиг

С AT такое было возможно, если послать чушь вместо ожидаемого набора.

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

С AT такое было возможно

И с USB возможно.

Нет, с USB HID оно молча игнорирует (хотя, может от драйвера зависит) дичь, а не «ТЫ ОХРЕНЕЛ?!», как это было с AT.

mord0d ★★★★★ ()

Здравствуйте ребятки. Я снова в этой теме. От своей идеи сделать клавиатуру не отказался, она будет, возможно и без всех этих модингов.

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

Новая идея. Запасаемся воздухом. Клавиатура будет содержать хаб, где рядом будет находится клавиатура и накопитель. На си будет написана программа, которая будет брать текущую локаль компа и отправлять на флешку, а клавиатура будет перебирать классические сочетания клавиш изменения раскладки, до тех пор пока не установится необходимая мне. Таким образом я все еще смогу переключать раскладки, по нажатию на одну кнопку.

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

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