DragonFlyBSD: кое-что о дополнительных настройках

Алексей Федорчук
2004.11.24

Установщик DFBSD через свое меню конфигурирования позволяет настроить многие параметры системы, но - далеко не все. И среди отсутствующих настроек могут оказаться важные для пользователя. Коему, таким образом, придется прибегнуть к ручному их определению. Должен сразу предупредить - пользователи FreeBSD найдут здесь мало для себя нового. Заметка рассчитана в основном на тех, кто дела с BSD-системами не имел.

Кратко о конфигах

Для ручной настройки любой системы требуется представление об общей схеме ее загрузки. В DFBSD, как это и положено представителю BSD-семейства, принята загрузка в BSD-стиле. Он характеризуется наличием главного стартового сценария - /etc/rc, запускающего сервисы (иначе именуемые демонами), определяемые собственными скриптами из подкаталога /etc/rc.d. А какие именно сервисы запускаются - описывается в главном конфигурационном файле - /etc/rc.conf.

При этом стартовые скрипты отдельных сервисов могут иметь (и, как правило, имеют) еще и собственные конфиги. Однако нам они пока не понадобятся - все, что описано в этой заметке, достигается редактированием конфига главного.

При установке DFBSD в каталог /etc на диске записывается некий умолчальный /etc/rc.conf, строки которого запускают лишь минимально необходимое для работы системы количество демонов, позволяющих получить клиентский доступ к сетевой файловой системе NFS и запускать SSH - защищенный шелл для удаленного доступа. Практически все остальные сервисы запрещены - или явным образом, или по умолчаниям. При настройке же через меню конфигурирования installer'а в /etc/rc.conf, в дополнение к умолчальным, дописываются отдельные строки (отмеченные явным образом соответствующими комментариями), разрешающие запуск некоторых дополнительных сервисов, или уточняющие параметры, например, системной консоли (шрифт и раскладка клавиатуры, если таковые определялись через installer.

Откуда берутся стартовые умолчания? А берутся они из файла /etc/defaults/rc.conf, в котором описаны всевозможные (и все возможные) стартовые сервисы и их параметры. Файл этот не предназначен для прямого редактирования (хотя оно и не запрещено атрибутами его доступа). Вместо этого полагается отыскать в нем строки, относящиеся к нужным сервисам, перенести их в /etc/rc.conf и разрешить их запуск (или, напротив, запретить, если оный разрешен по умолчанию, но в данном случае не нужен). Уточняющие опции сервисов также берутся из /etc/defaults/rc.conf, переносятся в /etc/rc.conf и им приписываются нужные значения.

В общем виде это делается, например, так: в одной виртуальной консоли (на которой нужно зарегистрироваться как root или получить его права командой su) в текстовом редакторе (в DFBSD для этого предназначен ee, но можно воспользоваться и классическим vi открывается файл /etc/rc.conf, в другой (на ней можно авторизоваться и обычным пользователем) дается команда

$ less /etc/defaults/rc.conf

И нужные строки из последнего просто переносятся в первый, где и модифицируются должным образом. Не вредно при этом задействовать и третью пользовательскую консоль - для чтения man (5) rc.conf. А как все это выглядит на практике - мы сейчас увидим.

Настройка консольной мыши

Перетаскивать текстовые фрагменты из консоли в консоль удобнее всего с помощью мыши (собственно, для этого она и предназначена в текстовом режиме любого Unix'а). Однако BSD Installer в современном своем виде (в отличие от sysinstall FreeBSD) не предусматривает включения службы консольной мыши, и по умолчаниям из /etc/defaults/rc.conf таковая запрещена. Так что с настройки мыши мы и начнем.

За работу мыши в консоли DFBSD (как и во FreeBSD) отвечает специальный "мышиный" демон - программа /usr/sbin/moused. Отыскиваем в /etc/defaults/rc.conf строки, к нему относящиеся - в данном случае удобно воспользоваться командой типа

$ grep mouse defaults/rc.conf

и смотрим на вывод результата поиска:

moused_enable="NO"  # Run the mouse daemon.
moused_type="auto"  # See man page for rc.conf(5) for available settings.
moused_port="/dev/psm0" # Set to your mouse port.
moused_flags=""   # Any additional flags to moused.
mousechar_start="NO" # if 0xd0-0xd3 default range is occupied in your
      # start like mousechar_start=3, see vidcontrol(1)

Из коего, собственно, и становятся очевидными дальнейшие действия. Для начала следует разрешить запуск мышиного демона - для чего в /etc/rc.conf вносится строка

moused_enable="YES"

Команда /usr/sbin/moused (а включить поддержку мыши можно и из командной строки, но только в данном сеансе работы - об этом будет сказано чуть позже) в общем случае требует двух опций - указания протокола (это то, что описывается строкой moused_type) и порта подключения (сериального, PS/2, USB - шинные мыши,, скорее всего, из употребления уже вышли). При описании протокола строка

moused_type="auto"

подойдет для всех, насколько мне известно, современных грызунов с разъемами PS/2 или USB. Причем для последних значение auto - единственно допустимое, тогда как для первых можно указать точно - ps/2. А вот для сериальных (и тем более шинных) мышей протокол следует задать в явном виде. Каком - смотрим в man (5) rc.conf или man (8) moused (я, грешным делом, об этих существах уже забыл).

Явное указание порта также необходимо только для сериальных и шинных мышей ("Вы знаете тетю Маню? - Я знаю тетю Маню. - Вы верите тете Мане? - Я верю тете Мане. - Так вот, у нее и спрашивайте..."). Хотя если указать

moused_port="/dev/psm0"

для PS-пополамной животины, или

moused_port="/dev/ums0"

для ее USB-родственницы, вреда не будет ни малейшего.

В строке

moused_flags=""

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

Ну а о строке

mousechar_start="NO"

поговорим, когда речь зайдет о русификации системы.

Подредактировав /etc/rc.conf вышеописанным образом, после перезагрузки мы получаем работающую консольную мышь. А что делать, если указательных устройств - два, как это было в моем случае? Потому как устанавливал я DFBSD на ноутбук, снабженный штатным тачпадом (которым практически не пользуюсь, но чтобы он не работал - так ведь западло) и внешней USB-мышью.

Со встроенным тачпадом все очень просто - с точки зрения протокола это, скорее всего, обычная PS-пополамная мышь, такая же, что подключается в качестве внешнего устройства. И чтобы его задействовать, нужно выполнить аналогичные действия, а именно: вписать в /etc/rc.conf строки

moused_enable="YES"
moused_type="auto"

А с USB-мышью - еще проще. Ее активизация, строго говоря, не требует даже указания порта - более того, при наличии двух указательных устройств оно ничего не даст. А всего-то и нужно - активизировать при старте системы демон USB-устройств (usbd). Для чего отыскиваем в /etc/rc.conf строку

usbd_enable="NO"

и умолчальное значение заменяем на YES. И теперь после перезагрузки можно пользоваться любым из наличных указательных устройств на выбор.

Все это прекрасно - скажете вы мне. Но не лениво ли вбивать руками указанные строки в наш /etc/rc.conf? Что я могу ответить на это? Конечно же лениво, гораздо проще было бы перетащить их мышью из /etc/defaults/rc.conf. Но ведь мышь-то еще не настроена? Не беда, включить поддержку мыши в текущем сеансе также труда не составит.

Для этого перво-наперво нужно активизировать мышиный курсор. Делается это командой vidcontrol, управляющей в системной консоли DFBSD (как и во FreeBSD) выводом на экран:

$ vidcontrol -m on

Это - интерактивный эквивалент строки

usbd_enable="YES"

из главного конфигурационного файла. А теперь из командной строки запускаем программу /usr/sbin/moused, задавая в качестве ее параметров протокол (тип) и порт. Для мыши PS/2 (и того же встроенного тачпада) это будет выглядеть так:

$ moused -t auto -p /dev/pms0

А для грызуна с USB-разъемом команда примет такой вид:

$ moused -t auto -p /dev/ums0

Разумеется, дается она от лица root'а - обычный пользователь не имеет требуемых прав доступа к файлам соответствующих устройств.

Доводка русификации

В предыдущей заметке я уже говорил, что установщик DFBSD позволяет настроить экранный вывод для воспроизводства кириллицы и клавиатурную раскладку - для ее ввода. Однако корректно он делает это для одного-единственного варианта - ввода в кодировке KOI8-R и вывода в кодировке CP866. Это - традиционная схема русификации большинства свободных Unix-подобных системе (Linux, FreeBSD), но не единственно возможная: ничто не запрещает в принципе использовать KOI8-R и для ввода, и для вывода. И даже DOS- и Windows-кодировки не принадлежат к числу запретных.

Далее, идущие в комплекте с DFBSD экранные шрифты с символами кириллицы (унаследованные от FreeBSD), мягко говоря, не являют собой верх эстетического совершенства. А штатных раскладок для кодировки KOI8-R - две. Одна соответствует клавиатурам с DOS-маркировкой клавиш, ныне почти не встречающимся в продаже, а вторая вообще странна: в ней знаки препинания расположены на нижнем регистре цифрового ряда. Что теоретически удобно - вот только клавиатур в такой маркировкой я в природе не наблюдал...

И последнее. Для корректной работы с кириллицей требуется установка локально-зависимых переменных, определяющих язык, страну, набор символов, формат десятичных дробей, даты, времени и так далее - все то, что определяется понятием локали (locale). А это в BSD Installer'е также не предусмотрено.

Таким образом, для полноценной русификации DFBSD требуется некоторая ручная доводка. Коей мы сейчас и займемся.

Начнем со шрифтов - ибо на штатные я лично не могу смотреть без слез (в том числе и в прямом смысле). Загрузка шрифтов, отличных от "умолчального" default (разумеется, не содержащего кириллицы), предписывается во все том же файле /etc/rc.conf. При установке шрифта через BSD Installer в него дописывается соответствующая строка, имеющая вид вроде такого:

font8x16="/usr/share/syscons/fonts/cp866-8x16.fnt"

Это - пример для шрифта в DOS-кодировке с матрицей 8 на 16 пикселей, обычный размер для стандартной плотности знаков (80 символов на 25 строк). Выглядит он вполне скверно, но прочие кириллические (для любых кодировок) - ничуть не лучше. То есть для начала нам нужно разжиться качественными экранными шрифтами.

Тут есть два пути: 1) взять пакет console-tools-cyrillic для Linux, вытащить из него шрифты (а среди них есть очень даже приличные) и преобразовать их в формат, используемый в BSD-консолях (т.н. raw-формат); 2) воспользоваться пакетом terminus-fonts, позволяющих сгенерировать шрифты для BSD-консоли очень хорошего качества. Оба варианта были подробно описаны в соответствующем материале и здесь я повторяться не буду. Тем более, что готовый к употреблению набор, содержащий все известные мне кириллические шрифты. Остается только развернуть полученный тарбалл в должном месте (в каталоге /usr/share/syscons/fonts, с помощью команды

$ vidcontrol -f /usr/share/syscons/fonts/font_name.fnt

выбрать подходящий и вписать его имя в соответствующую строку файла /etc/rc.confвместо проставленного BSD Installero'ом. Например, у меня это выглядит так:

font8x16="/usr/share/syscons/fonts/ter-k16b.fnt"

Это - шрифт из пакета terminus-fonts для кодировки KOI8-R полужирного начертания, что представляется мне наиболее простым и визуально комфортным. И, к слову сказать, - даже программы, использующие псевдографику (например, deco - одна из сирот командира Нортона), выглядят при этом очень даже нормально. При условии изменения типа терминала, конечно (о чем - чуть ниже).

Теперь - о клавиатурных раскладках. Таковые содержатся в каталоге /usr/share/syscons/keymaps. Для ввода кириллицы предназначены те, что описаны в файлах с перфиксом ru в имени:

$ ls /usr/share/syscons/keymaps/ru*
/usr/share/syscons/keymaps/ru.cp1251.kbd
/usr/share/syscons/keymaps/ru.cp866.kbd
/usr/share/syscons/keymaps/ru.iso5.kbd
/usr/share/syscons/keymaps/ru.koi8-r.kbd
/usr/share/syscons/keymaps/ru.koi8-r.shift.kbd

Если для ввода, как и для вывода, остановиться на кодировке KOI8-R, то любую из двух последних легко преобразовать к виду, соответствующему клавиатурам с Windows-маркировкой. Однако это уже проделано. Так что просто компируем файл такой раскладки ru.koi8-r.win.kbd куда положено, и должным образом изменяем соответствующую строку в файле /etc/rc.conf:

keymap="/usr/share/syscons/keymaps/ru.koi8-r.win.kbd"

Поскольку и для ввода, и для вывода используется одна и та же кодировка, необходимость в загрузке карты соответствия (т.н. screenmap) отпадает. И если при установке таковая была подключена, то соответствующую строку в /etc/rc.conf нужно удалить или закомментировать:

#scrnmap="/usr/share/syscons/scrnmaps/koi8-r2cp866.scm"

Использование KOI8-R для экранного вывода имеет два не очень приятных следствия. Первое - возможно, непривычный вид некоторых консольных программ, использующих псевдографику. Впрочем, при любой кодировке вывода они приобретут облик просто отвратительный. Для ликвидации чего следует изменить тип терминала. Тип этот описывается в файле /etc/ttys, по умолчанию - cons25. Однако, загрузив кириллический шрифт, свойства терминала мы изменили, и он перестал отвечать своему описанию в файле /etc/termcap. Для исправления чего достаточно в /etc/ttys в поисании виртуальных консолей заменить все вхождения cons25 на cons25r. После этого явные безобразия в псевдографике будут ликвидированы.

Второе следствие вывода в KOI8-R связано с мышью. В DFBSD (как и во FreeBSD) по умолчанию используется так называемый графический (точнее говоря, псевдографический) ее курсор - что удобно для отличия от собственно текстового курсора консоли. Но опять же по умолчанию коды его совпадают с кодами некоторых кириллических символов из таблицы KOI8. Что приводит к тому, что буквы эти просто пропадают с экрана при перемещении мыши. Чтобы избежать этого, вспомним о параметре mousechar_start, поминавшемся в предыдущем разделе. Так вот, соответствующей строке нужно придать вид

mousechar_start="3"

после чего все придет в норму.

Раз уж речь зашла о курсоре... Лично я проделываю еще и такую операцию: вношу в /etc/rc.conf строку

cursor="destructive"

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

И последнее, касающееся клавиатуры. Мне представляется не лишним задание ее скорости в виде

keyrate="fast"

Потому что при умолчальном значении normal она кажется мне раздражающе медлительной.

Завершающий штрих русской локализации - установка собственно локали: без этого невозможен ни ввод символов кириллицы в командной строке (что нужно не так уж и часто), ни просмотр русских текстов командами типа less (а вот это нужно всегда). В Linux локализация осуществляется приданием соответствующим переменным окружения (обычно достаточно LANG нужного значения (например, ru_RU.KOI8-R, что фиксируется в пользовательском или общесистемном профильном файле для того шелла, который применяется данным пользователем в качестве главного (login shell) - обычно это что-нибудь вроде /etc/profile или $HOME/bash_profile. В некоторых случаях это может быть неудобным - например, если разные пользователи используют в качестве login shell каждый свою программу, установка локали потребует отдельной редакции соответствующих конфигов. Конечно, скажем, zsh можно собрать так, чтобы он брал переменные окружения из общесистемного конфига типа /etc/profile, но по умолчанию это не делается.

Удобнее, по моему мнению, локализация выполняется во FreeBSD. Конечно, и там можно просто прописать переменную LANG в профильном файле login shell любого пользователя. Однако штатный способ установки локали - через специальный атрибут учетной записи, называемый class. Атрибут этот, описываемый в файле /etc/login.conf, может включать практически любые, в том числе и локально-зависимые, переменные окружения для данного пользователя, не зависимые от его login shell и сохраняющиеся неизменными при смене оного.

DFBSD унаследовала от своей прародительницы понятие класса. В частности, в ней предусмотрен класс russian, отличающийся от умолчального (default) только локально-зависимыми переменными:

russian|Russian Users Accounts:
  :charset=KOI8-R:
  :lang=ru_RU.KOI8-R:
  :tc=default:

обеспечивающими локализацию в кодировке KOI8-R (tc=default означает, что все прочие переменные окружения пользователей этого класса берутся из описания класса default). Если же требуется использование какого-либо иного набора символов - легко создать собственный класс, вписав в /etc/login.conf соответствующие строки.

В DFBSD теоретически доступны все локали, имеющие отношение к русскому языку, России и символам кириллицы. Как ни странно, в этой ОС нет штатной команды locale, которая позволила бы просмотреть весь их список. Однако сделать это можно непосредственно - командой

$ ls /usr/share/locale | grep ru         11:13
ttyv2
ru_RU.CP1251/
ru_RU.CP866/
ru_RU.ISO8859-5/
ru_RU.ISO_8859-5@
ru_RU.KOI8-R/
ru_RU.UTF-8/
ru_SU.CP866@
ru_SU.ISO8859-5@
ru_SU.ISO_8859-5@
ru_SU.KOI8-R@

Как видите, даже локаль SU имеет место быть как памятник эпохи. Наряду со светлым будущим всего человечества - локалью ru_RU.UTF-8. Впрочем, с нею у меня ничего не вышло. Видимо, потому, что консольные приложения, на которых я пытался экспериментировать, были собраны без ее поддержки.

В общем, для установки локали достаточно создать учетную запись обычного пользователя (на стадии установки мы ведь этот шаг пропустили) и отнести ее к классу - russian, если требуется кодировка KOI8-R, или какому-либо новообразованному - при необходимости другой кодировки. Сделать это проще всего утилитой adduser: она потребует вполне очевидных ответов на серию вопросов, среди которых будет и вопрос о классе.

Впрочем, если пользовательский аккаунт был создан посредством BSD Installer'а, атрибута class определить не позволяющего, это легко поправить в дальнейшем - с помощью универсальной утилиты для управления учетными записями pw:

$ pw usermod username -L russian

где опция usermod предписывает модернизировать существующий аккаунт (с пользовательским именем username), а опция -L собственно и определяет его класс.

И еще один момент при создании аккаунтов, не имеющий отношения к локализации, но важный сам по себе: в DFBSD, как и в большинстве BSD-систем, получить права администратора могут только пользователи, входящие в группу wheel. При использовании утилиты adduser вопрос о членстве в иных группах будет задан явно. Если же аккаунт создавался при установке, и на этот момент внимание не акцентировалось, то добавить пользователя в группу wheel (как и в любую другую) можно и потом - все той же командой pw:

$ pw usermod username -G wheel

Вот и все, что касается русификации. Да и вообще настроек - по крайней мере, пока - к различным аспектам конфигурирования DragonFlyBSD я еще надеюсь возвращаться, и не раз.

Обновлено: 12.03.2015