Еще раз про автоматический вход в систему
|
Практически "однопользовательские" машины становятся все обычнее по мере того, как все больше людей используют GNU/Linux на собственных настольных компьютерах. Принятая в Linux система многопользовательской регистрации при входе в систему редко используется значительной долей новых пользователей. Обычным требованием стала такая конфигурация, чтобы при включении компьютера автоматически (без запроса регистрационного имени пользователя и пароля) загружалась бы настроенная под единственного непривилегерованного пользователя графическая среда, обычно KDE или GNOME. Вопрос "Как это сделать?" задается столь часто, что меня удивляет не-написаность HOWTO по этому вопросу (ну, по крайней мере я такового не нашел). Данная статья ни в коей мере не претендует на полноту изложения, позволяющую восполнить этот пробел, но я надеюсь, что она сможет придать читателю верное направление:). Готовые решенияСпособы автоматизации входа в систему уже предлагались и один из них излагается в одном из старых выпусков Linux Gazette (http://www.linuxgazette.com/issue27/kodis.html).
Но, возможно, именно 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. Вам должны попасться строки наподобие следующих:
1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 Конкретное содержимое /etc/inittab варьирует от дистрибутива к дистрибутиву. В Debian-системах можно увидеть: 1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 3:23:respawn:/sbin/getty 38400 tty3 Измените строку, начинающуюся с "1:2345" так, чтобы она выглядела следующим образом: 1:2345:respawn:/sbin/getty -n -l /usr/local/sbin/autologinfred 38400 tty1 В результате пользователь 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]. Copyright (C) 2001, Adrian J. Chung.
|
Вернуться на главную страницу |