"Первый способ"
Если у вас используется первый способ - перечислением необходимых компонентов (keycodes, types, compat, symbols, geometry).
Просто скопируем из файла XF86Config все инструкции типа Xkb**** из секции "Keyboard" в наш файл. И слегка подправим.
Например, у вас там написано
XkbKeycodes "xfree86" XkbTypes "default" XkbCompat "default" XkbSymbols "us(pc104)+ru" XkbGeometry "pc(pc104)"
Надо -
- во всех строчках заменить префикс Xkb на Xkb_ ("case" букв менять не обязательно),
- вставить в каждую строчку инструкцию include,
- получившиеся инструкции include "..." взять в фигурные скобки и закончить знаком ";",
- и, наконец, добавить "обрамление" - xkb_keymap { .... }; .
Должно получится
xkb_keymap { Xkb_Keycodes { include "xfree86" }; Xkb_Types { include "default" }; Xkb_Compat { include "default" }; Xkb_Symbols { include "us(pc104)+ru" }; Xkb_Geometry { include "pc(pc104)" }; };
Это и есть полное описание настройки XKB. Которое можно загружать в X-сервер, программой xkbcomp.
Все наши добавки мы можем "приплюсовывать" в соответствующие строчки этого описания.
Первый способ задания конфигурации заключается в том, что вы можете указать непосредственно каждый из компонентов, например
XkbKeycodes "xfree86" XkbTypes "default" XkbCompat "default" XkbSymbols "us(pc104)" XkbGeometry "pc(pc104)"
Как легко догадаться, это означает, что
- описание keycodes берется из файла "xfree86" в директории {XKBROOT}/keycodes, причем из файла будет выбран тот блок, который помечен в нем флагом default;
- описание types берется из файла "default" в директории {XKBROOT}/types;
- описание compat берется из файла "default" в директории {XKBROOT}/compat;
- описание symbols берется из файла "us" в директории {XKBROOT}/symbols, блок "pc104";
- описание geometry берется из файла "pc" в директории {XKBROOT}/geometry, блок "pc104";
Надо заметить, что в любом блоке (в любых компонентах) может встретиться инструкция
include "имя_файла(имя_блока)" (естественно, имя_блока может отсутствовать)
что, как нетрудно догадаться, означает, что в текущий блок должно быть вставлено другое описание из указанного файла (указанного блока).
Поэтому полное описание может неявно включать в себя данные из многих других файлов, кроме тех, которые вы явно укажете в файле конфигурации X-сервера.
Этот способ (пожалуй, наиболее "цивилизованный") заключается в том, что в учетную карточку надо вписать"Account expiration time" (с помощью программы chpass), естественно, поставив там уже прошедшую дату. В этом случае, юзер как бы существует в системе - письма к нему идут, файлы сохраняются, во всех диагностиках, где может встретиться его имя, оно отображается правильно. Но, в то же время, если юзер попытается войти в систему, ему просто выдастся сообщение, что "ваш account истек".
Однако, это способ тоже не лишен недостатков. Чтобы понять - почему, надо рассмотреть подробнее, что значит "доступ в систему" юзера.
Обычный юзер может войти в систему (и пользоваться ее ресурсами) через терминал или по сети, с помощью telnet. При этом должна проработать программа login (которая проверит имя и пароль юзера и, если все правильно, запустит для него Shell). Эта же программа обычно вызывается для тех, кто заходит через модем и устанавливает IP соединение по модемной линии (PPP или SLIP). (Кстати, login'у можно запретить пропускать юзера, если прописать правильную строчку (запрещающую вход конкретному юзеру) в файле /etc/login.access. Как это правильно сделать, можно посмотреть в man login.access). Но, кроме того, юзер может (если, конечно, ваша система предоставляет такой сервис):
- иметь доступ к своим файлам через FTP, тогда проверкой имени/пароля занимается ftpd (программа-сервер FTP);
- читать свою почту через POP-сервер, тогда проверкой имени/пароля занимается программа popper;
- иметь доступ к своей домашней директории через сервер "samba", тогда проверкой имени/пароля занимается программа smbd;
- пользоваться RPC-сервисами - "удаленным запуском программ" (rlogin, rsh
и т.п.), тогда проверкой имени/пароля занимаются соответствующие демоны (rlogind, rshd и т.д.);
Так вот. Проблема в том, что не все перечисленные демоны (программы-серверы), ответственные за допуск юзера к ресурсам, могут обращать внимание на "Account expiration time". И, следовательно, все равно дадут юзеру возможность воспользоваться своими услугами.