суббота, января 12, 2008

Ядро Linux как хранитель экрана

Мне как рядовому юзеру от исходных текстов ядра Linux пользы мало, но сегодня я нашел им одно нетривиальное применение, а именно, в качестве хранителя экрана. Это выглядит довольно эффектно и необычно. Для этого потребуется: исходные тексты ядра, менеджер xscreensaver с дополнительным набором хранителей экрана (нужен только Phosphor) и утилита Argument Shuffle (для чего она нужна, описано ниже).

Итак обо всем по порядку. Пример на основе Ubuntu 7.10.

Для начала скачаем и распакуем исходники ядра:

cd /usr/src
sudo apt-get install linux-source
sudo tar -xpjf linux-source-2.6.22.tar.bz2
sudo ln -sf linux-source-2.6.22 linux-source

Поскольку все это я делаю на Ubuntu 7.10, а gnome-screensaver не позволяет настраивать отдельные хранители экрана, то придется заменить его на xscreensaver. Для этого произведем следующие действия.

Отключим gnome-screensaver - Система -> Параметры -> Хранитель экрана, снимаем все установленные галочки и убиваем процесс.

sudo killall gnome-screensaver

Отключим автоматический старт.

gconftool-2 --type boolean -s /apps/gnome_settings_daemon/screensaver/start_screensaver false

И на всякий случай сделаем gnome-screensaver неисполняемым.

sudo chmod -x /usr/bin/gnome-screensaver

Теперь устанавливаем xscreensaver.

sudo aptitude install xscreensaver xscreensaver-data-extra xscreensaver-gl-extra

Пропишем автоматический запуск демона - Система -> Параметры -> Сеансы -> Добавить -> xscreensaver -no-splash

Подправим пункт меню для запуска xscreensaver вместо gnome-screensaver.

sudo gedit /usr/share/applications/gnome-screensaver-preferences.desktop

Находим следующую строку:

Exec=gnome-screensaver-preferences

И заменяем ее на эту:

Exec=xscreensaver-demo

Также нужно закомментировать следующие строки:

X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gnome-screensaver
X-GNOME-Bugzilla-Component=general
X-Ubuntu-Gettext-Domain=gnome-screensaver

Чтобы не было конфликтов с Gnome Power Manager, нужно отключить в свойствах xscreensaver функцию управления питанием - Система -> Параметры -> Хранитель экрана -> Расширенные -> убрать галочку "Управление питанием разрешено"

Для того чтобы можно было блокировать экран через Система -> Выход -> Блокировать экран, создадим симлинк

sudo ln -f /usr/bin/xscreensaver-command /usr/bin/gnome-screensaver-command

В комплекте с xscreensaver (пакет xscreensaver-data-extra) идет хранитель экрана Phosphor. С помощью его и команды cat, мы и будем выводить исходные тексты на экран. Исходные тексты находятся в файлах *.c. В простом случае, чтобы вывести всех их на экран можно воспользоваться такой командой cat `find /usr/src/linux-source/ -name *.c`, но так как вывод команды cat неизменен, а получать одно и тоже - не интересно, мы будем использовать программу argshuf (Argument Shuffle). Эта программа работает следующим образом - принимает от другой программы список аргументов и выводит их в случайном порядке. Сборка argshuf довольно тривиальна:

Скачиваем архив. Для сборки необходим только build-essentials, далее все стандартно:

tar -vxzf argshuf-0.1.tar.gz
cd argshuf
make
sudo make install

Теперь можно выводить на экран по одному случайному файлу - cat `find /usr/src/linux-source/ -name *.c | argshuf`. Осталось только настроить Phosphor. Запускаем менеджер хранителей экрана, выбираем Phosphor, нажимаем "Настройка" и в поле "Текстовая программа" вводим

cat `find /usr/src/linux-source/ -name *.c | argshuf`

В результате всех вышеописанных действий должно получится нечто такое:

Написано под влиянием: http://micrux.net/?p=66 http://ubuntuforums.org/showthread.php?t=195557