среда, января 31, 2007

Чтоб не забыть - работающее решение с suspend2, GDM, xlock и пр.

На моем компьютере работаю в основном я, но время от времени - далекие от компьютеров родственники. Я работаю большую часть времени в иксах, но нередко - в "голой консоли". Остальные - только в иксах.

Чего я хочу. Хочу, чтоб при моем логине на четвертой консоли автоматически запускались иксы (на одинадцатой - первые десять у меня рабочие). А остальные юзеры должны входить в систему через GDM, запущенный на двенадцатой консоли. При этом должен работать спящий режим, при выходе из спящего режима должен появляться экран входа GDM (т.е. активной быть двенадцатая консоль) чтобы другой пользователь мог сразу залогиниться, а мои иксы (на 11-ой) должны быть заблокированы (xlock).

Настраиваем suspend в ядре (надежнее применить патч - suspend2). Чтоб оно работало удобно - в /etc/acpi/events/powerbtn пишем:

# We need to react on "button power.*" and "button/power.*" because
# of kernel changes.

event=button[ /]power
action=/usr/local/bin/sswsusp

где /usr/local/bin/sswsusp:

#!/bin/sh

su -c 'xlock -display :0 -planfont "-xos4-terminus-medium-*-normal-*-*-140-*-*-*-*-koi8-r"' portnov &
chvt 12
sudo swapon /dev/hda5
sudo hibernate
sudo swapoff /dev/hda5

swapon/swapoff нужны из-за того, что у меня обычно своп отключен, а suspend2 настроен писать образ памяти в своп. Если своп включен постоянно или suspend2 пишет образ в файл - swapon/swapoff не понадобится. xlock запускается от моего имени. chvt делает активной 12-ю консоль.

Теперь suspend работает по нажатию кнопки Power на системнике.

В конце ~/.zshrc пишем:

case "$(basename `tty`)@$HOST" in
tty4@portnov) runx
logout ;;
esac

где /usr/local/bin/runx:

#!/bin/bash

OPTIONS=$*

for I in $(seq 0 6)
do if [ ! -e /tmp/.X$I-lock ]
then break
fi
done

echo Running X on localhost:$I..
xinit ~/.xinitrc $OPTIONS -- -dpi 100 :$I

Этот скрипт запускает иксы на первом свободном дисплее.

Чтобы GDM нормально работал на 12-ой консоли, надо в /usr/share/gdm/defaults.conf (наверное, можно в более идеологически правильном месте… но не суть) поправить секцию [server-Standard]:

[server-Standard]
name=Standard server
command=/usr/bin/X -dpi 100 vt12 -audit 0
flexible=true

Без этой поправки GDM будет запускаться на седьмой консоли. А так как 7-я консоль у меня рабочая, то клавиатура уже перехвачена getty, и GDM клавиатуры не видит, в результате единственное, что можно сделать - ребутнуть комп из меню gdm.

Теперь выглядит работа так. Выключается компьютер (точнее, переводится в спящий режим) просто по кнопке Power на системнике. При включении показывается экран GDM. Если компьютер включил кто-то из родственников - он тыкает в свою иконку в списке, вводит пароль и работает. Если включил я - нажимаю Ctrl-Alt-F11, созерцаю заставку xlock, ввожу свой пароль - и продолжаю прерванный сеанс.

1 комментарий:

  1. Чтобы не забыть, положил себе в закладки :) Срочно не надо, но на будущее учту. Спасибо за заметку.

    ОтветитьУдалить