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

Тоже присоединяюсь

... к http://ivlad.livejournal.com/184754.html. Цитата:

В связи с т.н. "делом Поносова" (http://ru.wikipedia.org/wiki/Дело_Поносова ) хочу сказать, что если вы - учитель информатики (или любой другой учитель, или представитель администрации школы), который хочет (или, скажем мягче, готов попробовать) использовать Linux в учебном процессе, но не знает, с чего начать, я готов встретиться, рассказать и показать. Более-менее в любые выходные. Безвозмездно, то есть даром. =)
Правда, в совсем любые выходные я не могу (в частности, пол-февраля меня не будет в городе - буду в Перми на студенческой научной школе по программированию с 5-го по 11-е), но уж через e-mail (см. в профиле) меня найти можно. Ну и напомню - живу я в Магнитогорске Челябинской области, выезжаю редко. Если надо - могу до Белорецка съездить.

Также запостил предложение присоединяться на наш LUG (http://lug.mgn.ru), авось, еще кто-нибудь откликнется.

Чтоб не забыть - работающее решение с 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, ввожу свой пароль - и продолжаю прерванный сеанс.

вторник, января 30, 2007

Еще одна примочка для ion3

Пишем где-нибудь в конфигах:

 function toggle_tabbar(fr)
if WFrame.mode(fr)=="tiled-alt"
then WFrame.set_mode(fr,"tiled")
else WFrame.set_mode(fr,"tiled-alt")
end
end

defbindings("WFrame", {
...
mpress(MOD4.."Control+Button2", "toggle_tabbar(_)"),
...});

Теперь по Ctrl-среднему клику можно включать/выключать отображение строки заголовков окон для фрейма.

понедельник, января 15, 2007

Humm

Посмотрел по "культуре" обсуждение явления блогов. Много думал :)
Резко не понравилось, что постоянно вместо "блог" говорили "жеже".

суббота, января 06, 2007

И еще одна поделка на python-gtk

Сабж. Сделал удобнейшую вещь - при втыкании в usb-разъем флэшки от фотика появляется окошко "Слить фотки". Выбираем директорию, нажимаем Старт, и начинается процесс. На одном прогрессбаре показывается процесс копирования, потом на другом - процесс проявки из RAW. Т.е. практически аналог соответствующей тулзы из Гнома. Только Гном здесь совсем не нужен, не нужен ни hal, ни dbus, а нужны python, python-gtk2, python-glade-2.

Кстати, долго думал: как при подключении устройства показать окошко? Ну хорошо, любую программу при подключении флэшки можно запустить с помощью строчки где-нибудь в /etc/udev/rules.d наподобие этой:
SUBSYSTEM=="scsi", SYSFS{model}=="CF Card CF", ACTION=="add", RUN="/path/to/program"
Но ведь программа будет запущена с правами демона udevd, вне любых иксов, и вообще не знает, что иксы запущены. Ей бы надо определить, запущены ли иксы вообще, на каком именно дисплее (предусмотреть случай, когда запущены двое иксов - у меня это штатный режим), получить разрешение на подключение к этим иксам, и только тогда можно показывать окошко. Во геморрою-то...
Но, нормальные герои юниксоиды всегда идут в обход!
Обходной путь получился такой. При запуске иксов фоном запускается питоновский скрипт, который каждые 5 секунд проверяет содержимое пайпа /var/run/mphotos. Если там появляется строчка "plugged" - показывается окошко и делается вся работа по копированию и проявке фоток. Иначе ждет дальше. А udev указанным выше способом при подключении флэшки запускает примитивный скрипт, который и записывает строчку "plugged" в пайп /var/run/mphotos. Все.

четверг, января 04, 2007

Swish-e, python-gtk, glade...

Уже довольно давно я пользуюсь замечательным поисковиком swish-e. Он довольно быстро индексирует документы, а потом ищет по созданному индексу (о его близком сородиче, swish++, писал virens). Все бы хорошо, только компьютером я пользуюсь не один, вместе со мно им пользуются далекие от компьютеров родственники. И совсем мне неохота объяснять им про прелести командной строки... Так что понадобилась "графическая морда" к swish-e. Ничего полезного не нашел, пришлось писать самому. Стал подбирать, на чем писать. Прежде всего, логика предельно простая (запустить команду и перехватить стандартный вывод), поэтому желания писать на чем-нибудь типа C/C++ не возникает совсем. В идеале это должен быть bash-скрипт. Но как из bash сделать GUI? Варианты получились такие.

Xdialog. Позволяет что-нибудь спросить у пользователя, например, так:
ANSWER=$(Xdialog --stdout --inputbox "Что ищем?" 10 30)
Нет возможности сделать сколько-нибудь сложный диалог. В данном случае этот вариант отпал.

kaptain. Позволяет создавать довольно сложные диалоги, которые описываются на специальном языке. Но эти диалоги нельзя изменить после создания, т.е. они могут работать только как формы ввода. Кроме того, у kaptain большие проблемы с нелатинскими алфавитами. Опять отпадает.

gtk-server. Практически, представляет собой интерфейс к функциям gtk для любого окружения - для вызова функции нужно записать ее имя и параметры на стандартный вход gtk-server. Практически всем подходит, но shell-script с его использованием больше похож на обычную C-программу с использованием gtk. Пока отложил в сторонку.

А остановился я в итоге на связке python + python-gtk + glade. Python - скриптовый, достаточно высокоуровневый, язык, так что простая логика на нем занимает мало места. Сам интерфейс нарисовал с помощью Glade (визуальный конструктор интерфейсов для gtk), сохранил в .glade-файле (это xml), а из python-скрипта он только подгружается (с помощью python-glade). Скрипт получился довольно скромного размера, соответственно своей простой функциональности. Кому интересно, взять можно здесь: http://portnov84.narod.ru/downloads/sw-search-0.1b.tar.gz (Depends: swish-e, python, python-gtk2, python-glade-2).

вторник, января 02, 2007

2007 год...

Дожили. Температура за бортом - +2 градуса (ПЛЮС!).

PS. С Новым годом всех кстати.