Автологин в Linux
С распространением компьютеров все больше систем под Linux являются однопользовательскими. Принятая в Linux система многопользовательской регистрации при входе в систему редко используется значительной долей новых пользователей. Зачем вам этот ввод пароля, если вы ничего не скрываете и только единолично пользуетесь компьютером? Именно поэтому обычным требованием стала такая конфигурация системы, чтобы при включении компьютера автоматически (без запроса регистрационного имени пользователя и пароля) загружалась бы настроенная под единственного непривилегированного пользователя графическая среда. Весь вопрос только в том, как это сделать? В данной заметке я попытаюсь рассказать о способах настройки автологина.
В качестве самого простого решения сразу же можно порекомендовать воспользоваться пакетом autologin (http://www.linux-easy.com/development/autologin/). Этот пакет позоволяет запускать при начальной загрузке графический десктоп. Но лишь немногие дистрибутивы Linux включают его, как стандартный, в свою поставку. Это решение хорошо своей простотой.
Иной подход заключается в том, что последние версии kdm (это KDE'шная программа-менеджер входа в систему для X-Window) умеют делать автологин. Раскомментируйте следующие строчки в /etc/kde2/kdmrc:
AutoLoginEnable=true
AutoLoginUser=stranger
Благодаря этим настройкам kdm будет автоматически в момент запуска входить в систему под именем пользователя stranger, запускать выбранную stranger'ом графическую оболочку без какого-либо вмешательства пользователя. Дистрибутив Mandrake Linux поставляет графическую компоненту для активизации этой возможности kdm, позволяя избежать чреватое ошибками редактирование файлов настроек.
Но ведь kdm кому-то и не нужен или кто-то вообще не хочет его устанавливать. Есть ведь такие пользователи, которым больше нравится консоль или вообще для их работы не нужен графический менеджер. Для таких пользователей существует способ автоматически войти в систему на одной из виртуальных консолей сразу после загрузки компьютера.
Создайте файл autologin.c в любом текстовом редакторе и наберите следующую сишную программу:
int main()
{
execlp("login", "login", "-f", "stranger", 0);
}
Функция execlp выполнит команду "login -f stranger" и заменит текущий контекст обработки на контекст этого вызова (значение ключа -f описывается в man для login). Откомпилируйте эту программу с помощью компилятора gcc:
gcc -o autologin autologin.c
Теперь нам нужно получить права root'а. Для этого либо залогиньтесь под root'ом, либо воспользуйтесь командой su. Скопируйте исполняемый файл autologin в общедоступную директорию, например /usr/sbin:
cp autologin /usr/sbin/
Теперь обратим наши взгляды на файл /etc/inittab. Этот конфигурационный файл используется init, самым первым процессом, который запускается при инициализации Linux. В этом файле вы увидите строки наподобие следующих:
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
Измените строку, начинающуюся с "1:2345", так, чтобы она выглядела следующим образом:
1:2345:respawn:/sbin/getty -n -l /usr/sbin/autologin 38400 tty1
В результате пользователь stranger будет зарегистрирован в системе на первой виртуальной консоли. В некоторых дистрибутивах Linux (например, в RedHat) должна использоваться утилита /sbin/agetty. Ключ
-l <альтернативная программа регистрации в системе>
заменяет используемую по умолчанию программу /sbin/login той, которую мы скомпилировали ранее. Ключ -n говорит программе getty не запрашивать регистрационное имя пользователя.
Теперь настроим инициализацию при входе в систему графического рабочего стола. Если мы перезагрузим компьютер, то процесс init автоматически войдет в систему пользователем stranger на первой виртуальной консоли и запустит командную оболочку — shell. Однако для запуска графического рабочего стола пользователь stranger по-прежнему должен набирать команду startx сам, самолично нажимая на клавиши. А если это делать каждый раз влом? Можно ли автоматизировать и это?
Если stranger при входе в систему загружает оболочку /bin/bash, то первыми будут выполняться команды, перечисленные в файле .bash_profile, который находится в домашнем каталоге пользователя stranger. Вы можете добавить команду startx туда, но это вызовет некоторые проблемы, т.к. .bash_profile используется и в других ситуациях, таких, как вход в систему со второй виртуальной консоли, или при открытии терминалки. Вместо этого мы добавим в .bash_profile следующие строки:
if [ -z "$DISPLAY" ] && [ $(tty) == /dev/tty1 ]; then
startx
fi
После этого сохраните файл. Теперь при каждом новом заходе в систему с первой виртуальной консоли будет автоматически запускаться графический интерфейс. Написанные нами операторы гарантируют, что сеансы, запускаемые из среды графического рабочего стола или из других виртуальных консолей, не будут немедленно запускать новую графическую сессию. Пользователям оболочки /bin/sh следует добавить эти строки в файл .profile их домашнего каталога, а пользователям tcsh нужно конвертировать их в эквивалентный скрипт для csh.
Рассмотрим возможные улучшения.
При каждой загрузке машины пользователь stranger входит в систему с первой виртуальной консоли, инициализируется командная оболочка bash, которая читает свой ~/.bash_profile и вызывает команду startx — и все это без вмешательства пользователя или ввода паролей. Мы можем пойти дальше и воспользоваться файлом ~/.xinitrc для того, чтобы автоматически запустить на рабочем столе конкретную программу (чтобы почитать об этом подробно, обращайтесь к man startx). Поместите туда команду запуска своей любимой игры — и Ваша Linux-машина будет работать не хуже игрового автомата .
Автоматический вход в систему может быть полезен и вне контекста графического интерфейса пользователя. Можно настроить специального пользователя, шеллом для которого будет /usr/bin/top (программа вывода информации о процессах в системе). То есть, теперь одна виртуальная консоль будет служить для интерактивного наблюдения за активными процессами. Количество вариантов ограничено только вашей фантазией.