Честно говоря, после предыдущего выпуска я ждал критических писем
по поводу неправильных русских эквивалентов для названия методик оптимизации
кодогенерации:) Таковых пока не было. Что же это означает? Мы все
перевели верно? Таких русских эквивалентов (по крайней мере, достаточно
устойчивых) нет в природе? Это просто не важно -- и так все ясно?
Те, кто читает нашу рассылку, впервые слышат про оптимизацию, а те,
кто обсуждает проблемы оптимизации по-русски, нашу рассылку не читают?
Даже и не знаю..:)
Практически "однопользовательские" машины становятся все
обычнее по мере того, как все больше людей используют GNU/Linux на
собственных настольных компьютерах. Принятая в Linux система многопользовательской
регистрации при входе в систему редко используется значительной долей
новых пользователей. Обычным требованием стала такая конфигурация,
чтобы при включении компьютера автоматически (без запроса регистрационного
имени пользователя и пароля) загружалась бы настроенная под единственного
непривилегерованного пользователя графическая среда, обычно KDE или
GNOME.
Вопрос "Как это сделать?" задается столь часто, что меня
удивляет не-написаность HOWTO по этому вопросу (ну, по крайней мере
я такового не нашел). Данная статья ни в коей мере не претендует на
полноту изложения, позволяющую восполнить этот пробел, но я надеюсь,
что она сможет придать читателю верное направление:).
Этот способ предполагает наложение заплатки на программу /sbin/mingetty,
которая запускается скриптом init при загрузке системы.
Саму заплатку и инструкции по ее использованию можно найти на
http://users.jagunet.com/~kodis/autologin/autologin.html.
Но, хотя автоматический вход в систему в виртуальной консоли и облегчается,
этот способ сам по себе не инициализирует графическую среду. Читайте
ниже про то, как можно устроить и это тоже.
В качестве альтернативы можно воспользоваться пакетом autologin
(
http://www.linux-easy.com/development/autologin/).
Этот пакет позоволяет запускать при начальной
загрузке графический десктоп. Впрочем, лишь немногие дистрибутивы GNU/Linux
включают его, как стандартный.
Последние версии kdm (выполненой в стиле KDE замене xdm
-- менеджера входа в систему для X11). Раскомментируйте следующие
строчки в /etc/kde2/kdmrc:
AutoLoginEnable=true
AutoLoginUser=fred
Благодаря этим настройкам kdm будет автоматически в момент
запуска входить в систему под именем пользователя fred,
запускать выбранную fred'ом графическую оболочку без какого-либо
вмешательства пользователя. Mandrake поставляет графическую компоненту
для активизации этой возможности kdm, позволяя избежать
череватое ошибками редактирование текстовых файлов настроек.
Но, возможно, именно kdm кому-то не нужен или кто-то вообще
не хочет его устанавливать. Возможно, не хватает места на диске или
же kdm тяжеловат для старенького PC. К счастью, существует
способ автоматически войти в систему на одной из виртуальных консолей
сразу после загрузки компьютера, не завязанный на наложение патчей
или скачивание дополнительных программ. Этот процесс несколько более
"запутан", но он применим и для минимальной конфигурации
GNU/Linux -- нет необходимости устанавливать GNOME, KDE или тянущий
за собой весь QT kdm. Автоматическая загрузка командной строки
(или другого интерактивного консольного приложения) может быть полезной
даже в отсутсвие на машине X-ов:).
Метод правки напильником
Создайте файл autologinfred.c в своем любимом текстовом
редакторе и наберите эту короткую C-программу:
int main() {
execlp( "login", "login", "-f", "fred", 0);
}
Системный вызов execlp выполнит команду "login -f fred"
и заменит текущий контекст обработки на контекст этого вызова. Страница
man для login описывает действие ключа -f. Откомпилируйте
эту крошечную программу с помощью компилятора GNU C:
$ gcc -o autologinfred autologinfred.c
Получите права root'а (командой su) и скопируйте исполнимый
файл в общедоступную директорию:
# cp autologinfred /usr/local/sbin/
Теперь взглянем на /etc/inittab. Этот конфигурационный
файл используется init, самым первым процессом, который запускается
при инициализации Linux. Вам должны попасться строки наподобие следующих:
В результате пользователь fred будет зарегистрирован в
системе на первой виртуальной консоли. В некоторых дистрибутивах GNU/Linux
(например, в RedHat) должен использоваться /sbin/agetty.
Ключ -l <альтернативная программа регистрации в системе>
заменяет используемую по умолчанию программу /sbin/login
той, которую мы скомпилировали ранее. Ключ -n говорит
getty не запрашивать регистрационное имя пользователя.
Инициализация при входе в систему графического рабочего стола
Если мы перезагрузим компьютер, то процесс init автоматически
войдет в систему пользователем fred на первой виртуальной
консоли и запустит командную оболочку -- шелл. Однако для запуска
графического рабочего стола пользователь fred по-прежнему
должен набрать команду startx сам, путем личного нажима
на клавиши. Можно ли автоматизировать и это?
Если fred при входе в систему загружает оболочку /bin/bash,
то первыми будут выполнятся команды, перечисленные в файле ~fred/.bash_profile.
Вы можете добавить команду startx туда, но это вызовет
проблемы, т.к. .bash_profile используется и в других ситуациях,
таких, как вход в систему со второй виртуальной консоли или при открытии
xterm. Вместо этого мы добавим в .bash_profile следующие
строки:
if [ -z "$DISPLAY" ] && [ $(tty) == /dev/tty1 ]; then
startx
fi
При каждом новом заходе в систему с первой виртуальной консоли будет
автоматически запускаться графический интерфейс. Окружающие операторы
гарантируют, что сеансы, запускаемые из среды графического рабочего
стола или из других виртуальных консолей, не будут немедленно запускать
новую графическую Х-сессию. Пользователям /bin/sh следует
добавить эти строки в ~fred/.profile, а пользователям tcsh
нужно конвертировать их в эквивалентный скрипт для csh.
Если GUI уже запущен (через xdm, gdm, kdm
и т.д.), то следует выполнить команду startx-:1. Она
создаст вторую GUI-сессию. Если Вам нужна только один активный графический
десктоп, то лучше отключить существующий экземпляр Xserver'а
уменьшив уровень выполнения [run level] (в RedHat) или отключив [unlinking]
конфигурационные файлы /etc/rc?.d/S99?dm (в Debian).
Варианты
Теперь при каждой загрузке машины пользователь fred входит
в систему с первой виртуальной консоли, инициализируется коммандная
оболочка bash, которая читает свой ~/.bash_profile
и вызывает команду startx -- и все это без вмешательства
пользователя или ввода паролей. Не правда ли мило?
Мы можем пойти дальше и воспользоваться файлом ~/.xinitrc
для того, чтобы запустить на рабочем столе конкретную программу (за
деталями обращайтесь к man startx). Поместите туда
свою любимую игру и Ваша Linux-машина будет работать, что твои игровые
автоматы, за вычетом декоративного корпуса. Запустите проигрыватель
Ogg Vorbis с визуальными эффектами и Вы получите специализированный
музыкальный автомат:).
Автоматический вход в систему может быть полезен и вне контекста
графического интерфейса пользователя. Можно настроить специального
пользователя, шеллом для которого будет /usr/bin/top. Теперь
одна виртуальная консоль будет служить для интерактивного наблюдения
за активными процессами. Варианты безграничны.
Заключение
Многопользовательская операционная система GNU/Linux становится все
более популярной в однопользовательском контексте. В таких ситуация
можно/хочется легко обойтись и без протоколов регистрации пользователя
в системе. Данная статья иллюстрирует тот факт, что UNIX-корни не
мешают использованию ОС и в таких "специальных" случаях.
Несложные изменения конфигурационных файлов и немного программирования
-- и процесс входа в систему может быть легко автоматизирован в большинстве
дистрибутивов GNU/Linux, в полной мере сохраняя гибкость и настраиваемость
системы.
Адриан Дж. Чанг [Adrian J Chung]
Время, свободное от преподавания информационных технологий студентам
Вест-Индийского Университета в Тринидаде [University of the West Indies,
Trinidad], Адриан посвещает написанию системных скриптов для управления
сетью Linux-машин. Или проводит эксперименты по взаимодействию различных
интерпретируемых языков [scripting environments] с "самопальными"
[home-brew] библиотеками визуализации и построения изображений [computer
graphics renderers and data visualization].