среда, января 23, 2008

Настройка Linux для kiosk-mode

За последнее время несколько раз пришлось делать сабж, так что решил задокументировать.

Итак, что нужно: чтобы запускалась графическая среда, в ней сразу нужное приложение. Пользователь должен начинать работу сразу, без всяких процедур авторизации и пр. При этом пользователь должен иметь возможность работать только с данным приложением, ну, возможно, оно разрешает запускать какие-то другие программы, но только строго по списку. Пользователь не должен иметь возможности закрыть основное приложение, выйти из графической среды, перелогиниться под другой учетной записью, выключить/перезагрузить компьютер.

Где это нужно - думаю, понятно. Устройства вроде банкоматов, компьютеры общественного пользования, компьютерные клубы. Иногда возникает желание такое сделать дома для компьютерно неграмотной родни - чтобы ничего не напортачили.

Конечно, для надежности нужны некоторые действия с аппаратной частью. Приводы CD/DVD (и floppy) убираются, разъемы usb/firewire на передней панели отключаются от материнки, кнопки reset и power также отключаются от материнки. Системник опломбируется. Только это все надо делать _после_ возни с программной частью - ато ребут в случае чего будет проблемой ;)

С программной частью так. Для автовхода в систему используем GDM (можно kdm/xdm, но они хуже настраиваются) - в настройках (gksudo gdmsetup) включаем Auto login или Timed login, на усмотрение. На вкладке "Пользователи" разрешаем вход только нужным пользователям (чаще всего - только одному; прав у него, конечно, самый минимум). На вкладке "Локальный вход" снимаем галочку "Показывать меню действий". На вкладке "Общие" включаем галочку "Перезапускать XServer..." и указываем нужный сеанс по умолчанию (мы его сейчас создадим, пока что выберите там что угодно).

Создаем файл /usr/share/xsessions/kiosk.desktop (имя любое):


[Desktop Entry]
Encoding=UTF-8
Name=Kiosk mode
Comment=Kiosk mode
Exec=/usr/local/bin/kiosk-session
Type=Application


Теперь опять запускаем gdmsetup и указываем Kiosk mode в качестве сеанса по умолчанию.
/usr/local/bin/kiosk-session будет такой:


#!/bin/bash

# Это приложение не должно позволять закрыть его
самое-нужное-приложение & xpid=$!
gnome-settings-daemon & # Это если хотим использовать настройки Gnome
metacity & # Или какой вам оконный менеджер больше нравится
чего-еще-хотим-запускать-автоматом &
# Ждем завершения основного приложения, т.е. предположительно до бесконечности.
wait $xpid


(не забудьте sudo chmod +x /usr/local/bin/kiosk-session).

Теперь правим /etc/X11/xorg.conf:


Section "ServerFlags"
Option "DontZap" "True" # Запрещаем Ctrl-Alt-Backspace
Option "DontVTSwitch" "True" # Запрещаем Ctrl-Alt-F#
EndSection


Ставим openssh-server, убеждаемся что он будет стартовать автоматом и что в sshd_config стоит "X11Forwarding yes". Если нужен будет доступ по vnc, ставим x11vnc и прописываем в автозапуск (в kiosk-session).

Ну вроде всё, ребутаемся и наблюдаем результаты своих трудов ;)
Вся дальнейшая настройка - по ssh.

PS. Выбору оконного менеджера стоит уделить некоторое внимание. Дело в том, что многие WM, в том числе и из самых "простых" и "легких" (icewm, ion3, ...) имеют встроенную "командную строку", позволяющую запускать что угодно. Так что надо либо отключить это в настройках, либо выбрать WM без такой возможности (тот же metacity; Alt-F2 в Gnome обеспечивает не он, а gnome-panel).

суббота, декабря 29, 2007

Screen-Launcher


Вот делаю такую программу. Это еще один десктоп, позволяющий запускать программы, что-то из серии idesk или rox-desktop.
Первое отличие от упомянутых проектов - кнопки запуска могут быть организованы в разделы, что упрощает ориентацию при большом количестве программ на десктопе.
Второе отличие: программа сама определяет, является ли текущий юзер 'админом' или "простым пользователем" (как - см. ниже). Добавлять/удалять/редактировать разделы и кнопки запуска могут только админы. Юзер, соответственно, может запускать только то, что ему разрешил админ.
Программа делается в основном для компьютерных клубов, но ее вполне можно использовать и дома.

Конфиг - простой текстовый файл ini-формата /etc/launcher.conf, его можно редактировать руками, а можно прямо из интерфейса самой программулины.
Админы от юзеров отличаются очень просто: считаем, что текущий юзер - админ, если у него есть право на запись в конфиг. Т.о. для отделения юзеров от админов можно использовать всю мощь традиционной unix-системы разделения прав (группы, ACL-ы и пр.).
Программа на python-gtk2.
Скрин админского интерфейса:

Посмотреть/взять можно из svn тут:
http://screenlauncher.googlecode.com/
На днях авось выложу deb-пакет.

UPD. Вставил скриншоты, выложил deb-пакет.
Предвидя вопрос: да, wallpaper-ы пока не поддерживаются.
Для меня эта задача с низким приоритетом.

UPD2. Ух ты, оно под маздаём запустилось!!! :)

понедельник, октября 15, 2007

Проверяю постинг из гнома ;)

Сабж. Нашел такую штуку - gnome-blog-poster.

ЗЫ. Результат: работает, но заголовок вставляет прямо в тело сообщения вместо соответствующего поля. Вобщем, пока — недоделка. Авось когда-нить заработает нормально.

суббота, сентября 08, 2007

"Состояния клавиатуры" в ion3

У меня на клавиатуре есть такие специальные клавиши для управления плеером (XF86AudioPlay итп). Использовать их по назначению довольно удобно, да вот беда - я редко запускаю плеер. В итоге большую часть времени они не использовались. Так что захотелось мне повесить на них запуск часто используемых приложений. Но и основные свои функции они должны выполнять, когда надо. Для этого пришлось сделать два "состояния клавиатуры" средствами ion3. Сначала код:

STATE=0

function toggle_state(ws)
if STATE==1 then
STATE=0
ioncore.exec_on(ws,"xset -led 3")
else
STATE=1
ioncore.exec_on(ws,"xset led 3")
end
end

function exec_on_if(ws,prog_true,prog_false)
if STATE==1 then
ioncore.exec_on(ws,prog_true)
else
ioncore.exec_on(ws,prog_false)
end
end

function exec_if(prog_true,prog_false)
return "exec_on_if(_,'"..prog_true.."','"..prog_false.."')"
end

....

kpress("Scroll_Lock","toggle_state(_)"),

kpress("XF86AudioPlay", exec_if('audacious -t', GIMP)),
kpress("XF86AudioStop", exec_if('audacious -s', 'mypaint')),
kpress("XF86AudioNext", exec_if('audacious -f', 'gedit')),
kpress("XF86AudioPrev", exec_if('audacious -r', 'gqview')),
kpress("XF86AudioMute", exec_if('xvolume toggle', 'inkscape')),
kpress("XF86AudioRaiseVolume", exec_if('xvolume 5+%', 'liferea')),
kpress("XF86AudioLowerVolume", exec_if('xvolume 5-%', 'f-spot')),


Как это работает.
В режиме "0" (по умолчанию) "аудио" клавиши запускают приложения. В режиме "1" - управляют плеером. Переключение между режимами - клавишей ScrollLock. Индикация режима - соответствующей лампочкой на клавиатуре.

Конечно, постоянно переключать режимы - не очень удобно, но изредка - в самый раз.

Скрин

Решил выложить один свой давний скрин.


Скрин вообще ни о чем, чисто поржать ;).

среда, сентября 05, 2007

LiveMath: Продолжаю штамповать LiveCD.

Сделал еще один лайв, этот в основном - демонстрационного назначения (хотя, в принципе, вполне пригоден для работы). Соответственно названию, содержит кучу математического софта:

Системы компьютерной алгебры:
Maxima (http://maxima.sourceforge.net) - полнофункциональная система аналитических вычислений;
Axiom (http://axiom-developer.org) - мощная система компьютерной алгебры;
YaCas (http://yacas.sourceforge.net) - еще одна система компьютерной алгебры;
PARI/GP (http://pari.math.u-bordeaux.fr/) - широко используемая компьютерно-алгебраическая система, разработанная для быстрых вычислений в теории чисел (факторизации, алгебраическая теория чисел, эллиптические кривые...);
GAP (http://www.gap-system.org/) - свободно распространяемый, открытый и расширяемый программный комплекс для применения в области вычислительной дискретной математики, в частности, теории групп;
Mathomatic (http://www.mathomatic.org/) - переносимая, универсальная программа, которая может решать, упрощать, группировать, дифференцировать, интегрировать и сравнивать алгебраические выражения;
Системы автоматизации доказательств:
ACL2 (http://www.cs.utexas.edu/users/moore/acl2/) - язык программирования для моделирования компьютерных систем и средство, помогающее доказывать свойства этих моделей;
Coq (http://coq.inria.fr/) - система автоматизированного построения доказательств, с помощью которой, кроме всего прочего, была решена проблема четырех красок;
HOL (http://hol.sourceforge.net) - система автоматизации доказательств для логики высших порядков;
Системы численных вычислений:
SciLab (http://www.scilab.org/) - пакет научных программ для численных вычислений, предоставляющий мощное открытое окружение для инженерных и научных расчетов;
GNU Octave (http://www.octave.org/) - язык высокого уровня, предназначенный для выполнения математических вычислений;
Tela (http://www.geo.fmi.fi/prog/tela.html) - "интерактивный тензорный язык" для численных вычислений;
Разное:
Yorick (http://yorick.sourceforge.net/) - компактная программная среда, предназначенная для комплексного решения научно-инженерных вычислительных задач;
GNU R (http://r-project.org/) - мощный язык статистических вычислений, используемый профессиональными статистиками;
GRETL (http://gretl.sourceforge.net/) - система эконометрического анализа;
Kig (http://edu.kde.org/kig/) - интерактивная геометрия;
Инструменты построения графиков - geg, kmplot, gnuplot;
Визуализация данных:
Mayavi (http://mayavi.sourceforge.net/) - открытый пакет научной 2D и 3D визуализации данных;
OpenDX (http://www.opendx.org/) - программное средство для анализа данных в графическом виде, визуализации научных данных;
GGobi (http://www.ggobi.org/) - среда визуализации многомерных данных;
LabPlot (http://labplot.sourceforge.net/) - программа для анализа и визуализации различных данных;
Grace6 (http://plasma-gate.weizmann.ac.il/Grace/) - программа для подготовки двумерных графиков по численным данным;
PAW (http://cern.ch/paw/) - интерактивная программа анализа и графического представления результатов. Может применяться для анализа большого и очень большого объёма данных;
Научные редакторы:
teTeX (http://www.tug.org/tetex/) - полноценный дистрибутив TeX;
TeXmacs (http://texmacs.org) - текстовый редактор для набора математических и прочих научных текстов, также позволяет включать в документ сессии Axiom, Maxima, Octave, SciLab и других систем компьютерной математики;
Kile (http://kile.sourceforge.net/) - интегрированная среда подготовки документов с помощью TeX;
Texmaker (http://www.xm1math.net/texmaker/) - интегрированная оболочка для LaTeX;
LyX (http://www.lyx.org/) - WYSIWYM (What You See Is What You MEAN) редактор который работает как front end to LaTeX;

Здесь не упомянуты пара текстовых редакторов, браузер, почтовик, а также фронт-енды к упомянутым системам, ну и еще кучка дополнительных программ. Все основные программы с встроенным хелпом, а также на CD есть еще подборка документации по ним.

пятница, августа 31, 2007

Пара слов о Xorg

Вот, хочу сообщить тем кто не знает. Современный Xorg (начиная, как минимум, с 7.0) в состоянии сам определить параметры монитора и видеокарты. Настолько в состоянии, что может работать без конфига (xorg.conf) вообще! Правда, он не может сам догадаться, что нам надо вводить с клавиатуры русские буквы итп, такие вещи в конфиге все-такие приходится прописывать.
Это я на самом деле в продолжение темы о LiveCD. Ибо там традиционно вставал вопрос - как написать универсальный xorg.conf ?
Сейчас это практически не проблема. Указываем
Driver "vesa"
Этого вполне достаточно на большинстве видух (ну да, 3Д ускорением и не пахнет, но зачем оно на LiveCD?). Для всех остальных добавляем куда-нибудь в startup-скрипты такой код:
DRIVER=$(egrep -o 'x11=[a-z0-9]+' /proc/cmdline | cut -d'=' -f2)
if [ "$DRIVER" ]
then sed -i -e "s/vesa/$DRIVER/" /etc/X11/xorg.conf
fi
Это позволяет указать нужный драйвер при запуске livecd (в приглашении isolinux вводим, например: "linux x11=sis").
Опции VertRefresh и HorizSync (которые в свое время, помнится, могли стоить испорченной видухи или монитора) не указываем вообще. Xorg их сам спросит у монитора и выставит максимальную рабочую частоту. Аналогично, можно не указывать строчку Modes. Или указать, перечислив возможные разрешения: Modes "1024x768" "800x600" "640x480".