обойдемся без xdm/kdm/gdm
Иногда мы загружаем и постоянно держим в пмяти какой-нибудь 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-]
- 2364 просмотра
Страница для печати

вот что получилось у меня (я пользуюсь 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% #.........
если они вообще установлены ;)
а запускать - да, будет. в этом, собственно, и смысл скрипта :)
Отправить комментарий