обойдемся без xdm/kdm/gdm


freemer - Posted on 03 Октябрь 2006

Иногда мы загружаем и постоянно держим в пмяти какой-нибудь DM, напрмиер xdm или kdm при работе в кде, но часто он нам не нужен, экран логина с ним мы вдим один раз в день. Поэтоу можно и вовсе обойтись без подобных программ а логиниться в консоль а автостарт иксов сделать средствами шелла, вот пример для zsh:
пишем в ~/.zlogin:

#проверка нужного терминала:
if [geshifilter- "$TTY" = "/dev/ttyv0" ]; then #проверка на запущеность иксов if [ -z `ps | grep startx | grep -v grep` ]; then echo "X server not started! Starting it...." startx else echo "X server already started!" fi else echo "welcome to $TTY" fi Теперь при каждом логине на консоль шелл будет проверять какой это терминал (я сделал так на случай, если хочется просто залогиниться сразу в консоль и вовсе не стартовать иксы), если мы на первой консоли то выполнить простенькую проверку на запущенность иксов и запустит их если проверка даст отрицательный результат. Если же иксы уже запущены или консоль у нас вовсе не первая, то мы увидим лишь приветствие. Вот и все - сам себе kdm.[/geshifilter-]

0
Ваша оценка: Ничего
..

вот что получилось у меня (я пользуюсь bash'ом)

:~$ cat .bash_profile
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

#проверка нужного терминала:
if [ $(tty) = "/dev/tty1" ]; then

# если иксы еще не запущены - стартуем их в бэграунде и лочим консоль
pgrep [s]tartx ||exec startx & vlock -c

else
echo "welcome to $(tty). probably X server alredy running"

fi

должна быть установлена утилита vlock.
она позволяет залочить любую консоль (tty или pts) и имеет возможность разлочивания либо юзером который залочил, либо рутом.

в итоге имеем запущеные иксы, которые если даже кто-то схлопнет по ctrl+alt+backSpace то доступ к машине не получит.

Переменная TTY определена не во всех дистрибутивах:
t:~$ echo $TTY

t:~$
Поэтому для получения имени файла текущей консоли лучше вызвать tty.

И ещё одна хитрость, которую я нашёл, кажется, в ABS-guide: вместо grep startx | grep -v grep можно писать grep [s]tartx; смысл, надеюсь, понятен.

Кроме того, я не понимаю, зачем использовать [geshifilter- для проверки вывода грепа, если у самого грепа есть ключ q.

Итого, сократив заодно условную конструкцию и вывод сообщений, я бы написал так:
[ $(tty) == /dev/tty1 ] && (ps | grep -q [s]tartx || exec startx) Ну и ещё один момент. Если нужно, чтобы иксы стартовали только в том случае, если они ещё не вызваны вообще (а не только с текущей консоли), то вместо ps нужно писать ps a. Да, и последнее: в случае, если login-shell'ом является bash (что в линуксах всё же почаще, чем zsh), то эту конструкцию нужно прописывать в ~/.bash_profile[/geshifilter-]

Я бы заменил "ps | grep -q [s]tartx" на "pgrep -x startx".
Или, ещё лучше, с проверкой юзера от которого запущены иксы: "pgrep -u $(whoami) -x startx". Но тогда надо доработать скрипт, чтобы на другом дисплее запускал (startx -- :1) если первый занят другим юзером.

гм.. интересная идея. нужно бы довести до ума
--
Signature invent in progress 23% #.........

а потом если логинится в консоль, оно все время будет запускать иксы?

если логинится конкретно в /dev/tty1(ctrl-f1 которые) то будет запускать иксы если они еще не запущены
--
Signature invent in progress 22% #.........

если они вообще установлены ;)
а запускать - да, будет. в этом, собственно, и смысл скрипта :)

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.