Как создать собственную раскладку клавиатуры для Linux?

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

Пример

Я собираюсь использовать команду su, чтобы проиллюстрировать почему. Я настроил 3 учетные записи пользователей, user1, user2 и user3.

$ su -c 'whoami' user1
user1
$ su -c 'whoami' user2
user2
$ su -c 'whoami' user3
user3

Вот моя структура каталогов:

$ mkdir -p /data/user{1..3}
$ for i in {1..3};do chown user${i}:user${i} /data/user${i};done

$ ls -l /data/
total 12
drwxr-xr-x 2 user1 user1 4096 Jun 30 11:35 user1
drwxr-xr-x 2 user2 user2 4096 Jun 30 11:35 user2
drwxr-xr-x 2 user3 user3 4096 Jun 30 11:35 user3

Если мы установим разрешения таким образом, что ни один пользователь не сможет прочитать /data, то ни один пользователь не сможет выполнить ls -l /data.

$ chmod 750 /data

$ su -c 'ls -l /data' user1
ls: cannot open directory /data/: Permission denied

Чтобы разрешить пользователю, не являющемуся владельцем (root )или в группе (root ),мы должны включить разрешения r-xдля всех (, т.е. другие разрешения ).

Если бы мы просто включили разрешения r--, пользователь мог бы перечислить некоторые аспекты каталога, но не получить такие вещи, как разрешения содержимого в каталоге.

$ chmod 754 /data

$ su -c 'ls -l /data/' user1
ls: cannot access /data/user3: Permission denied
ls: cannot access /data/user2: Permission denied
ls: cannot access /data/user1: Permission denied
total 0
d????????? ? ? ? ?            ? user1
d????????? ? ? ? ?            ? user2
d????????? ? ? ? ?            ? user3

Если мы попытаемся дать пользователю разрешение только на выполнение, --x, он сможет получить доступ к подкаталогам -каталога /data, но не сможет вывести список содержимого /data.

$ chmod 755 /data

$ su -c 'ls -l /data/' user1
total 12
drwxr-xr-x 2 user1 user1 4096 Jun 30 11:35 user1
drwxr-xr-x 2 user2 user2 4096 Jun 30 11:35 user2
drwxr-xr-x 2 user3 user3 4096 Jun 30 11:35 user3

А как насчет ACL?

Могут ли здесь работать списки управления доступом (ACL )? В расследовании этого я не думаю, что они могут дать вам что-нибудь лучше.

Здесь я устанавливаю разрешения на 750 для /dataи добавляю ACL для пользователя 1 в /dataили --x:

.
$ chmod 750 /data
$ setfacl -m u:user1:x /data

$ ls -ld /data
drwxr-x---+ 5 root root 4096 Jun 30 11:35 /data

Наш пользователь user1 больше не может получить доступ/data:

$ su -c 'ls -l /data' user1
ls: cannot open directory /data: Permission denied

Но по-прежнему виден подкаталог -/data/user1:

$ su -c 'ls -l /data/user1' user1
total 0    

Это влияние setfaclна разрешения:

    $ getfacl /data
    # file: data
    # owner: root
    # group: root
    user::rwx
    user:user1:--x
    group::r-x
    mask::r-x
    other::---

В чем проблема?

Проблема в том, что для того, чтобы иметь доступ к списку содержимого каталога, в основном /data, пользователю нужны права r--для этого. Мы не можем явно выдавать «части» этого, это все или ничего в мире разрешений режима в Unix.

1
25.08.2020, 23:28
1 ответ

Вы можете редактировать раскладки с помощью XKeyCaps . С другой стороны, XKeyCaps — это графический интерфейс, и он очень зрелый. Недостатком XKeyCaps является то, что это только передняя -часть старого -интерфейса X-window раскладки клавиатуры, xmodmap , а не современного интерфейса, XKB .

При желании можно использовать xmodmap, но он не такой мощный, как XKB. Функции XKB, которых нет в xmodmap, включают:

  • Улучшена обработка модификаторов. X11 имеет много особенностей, связанных с модификаторами, в том числе тот факт, что CapsLock и NumLock считаются модификаторами. Примером того, что я делаю с XKB, который не работает с xmodmap, является то, что я делаю Alt + CapsLock равным Lock(, вот как X11 пишет Caps Lock ), но не сам CapsLock . Еще одна вещь, которую xmodmap не может сделать, это чтобы разные наборы модификаторов влияли на разные клавиши, например, чтобы Shift и AltGr влияли на печатные символы, но Ctrl и Alt влияет на функциональные клавиши.
  • XKB состоит из составных модулей. Xmodmap является монолитным. Это отлично подходит для людей, которые хотят комбинировать предопределенные настройки («дайте мне венгерскую клавиатуру с Ctrl и CapsLock поменяны местами и Alt + Windows это Menu, а для клавиши коды клавиатуры Sun 5» ), но вам все равно, поскольку вы создаете собственную раскладку.
  • При «горячем» подключении клавиатуры повторно применяются системные настройки XKB по умолчанию. Это также ограничение XKB, поскольку повторно применяются системные значения по умолчанию, а не ваши пользовательские настройки.
  • В XKB улучшена поддержка не -алфавитных языков или ввода нескольких -сценариев. Я не могу дать подробностей, потому что это не та тема, которую я хорошо знаю.
  • Имеются инструменты для быстрого переключения между раскладками (, например, для определенных оконных -раскладок )или для указания текущей раскладки клавиатуры, которые работают только с XKB.
  • Я не уверен, что Wayland поддерживает xmodmap.

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

Если вы решите написать раскладку вручную, преимущество xmodmap в том, что это очень просто. Вы можете прочитать справочную страницу, может быть, посмотреть пример, и вы быстро все поймете, кроме тонкости модификаторов. Если вы не можете понять, как это сделать с помощью xmodmap, вероятно, это невозможно. Преимущество XKB, опять же, в том, что он более мощный. Недостатки XKB заключаются в том, что он сложный и плохо документирован. Некоторые предлагали прочитать, если вы хотите пойти по этому пути:

Какой бы способ вы ни выбрали, источником раскладки является текстовый файл или набор текстовых файлов, который хорошо работает с контролем версий.

8
18.03.2021, 23:09

Теги

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