27 мар. 2010 г.

anyremote HOWTO

Задолбавшись в очередной раз вставать с дивана, дабы прибавить звук или запустить очередную серию "Теории большого взрыва", захотелось облегчить свою тяжелую и неказистую жизнь ваянием "лентяйки". Так как из инструментария имелся, собственно, компьютер с Debian Sid и телефон с J2ME, умеющий Bluetooth, использовать будем именно их ;). Для рабочей станции был прикуплен самый дешевый голубозубый адаптер (Acorp какой-то). 
delayer@inspire:~# lsusb
Bus 002 Device 002: ID 1131:1004 Integrated System Solution Corp. Bluetooth Device
Ресерч по предмету управления через блютуз мометнально привел на страничку проекта anyremote, полностью удовлетворяющего моим запросам. Как сам anyremote, так и его фронтенды kanyremote и ganyremote (угадай, для какой DE который ;) ), наличествуют в репозиториях, ставим оттуда.
Сразу оговорюсь, что увидеть kanyremote мне так и не удалось, ибо пакет требует в качестве зависимости python-kde4, который на сегодняшний день является сломанным пакетом (для Sid точно). Если у вас KDE чуть постарее чем 4.3.4-2, то установиться должно. Я же поставил ganyremote.
Наверное, для знакомства с возможностями программы, да и для закачки J2ME-клиента в телефон (однако, можно jar/jad-файлы взять отсюда), графический фронтенд попробовать стоит. Не буду останавливаться на менюшках, опциях и прочем - интерфейс локализован, всё, на мой взгляд, интуитивно понятно. К тому же, у проекта достаточно хорошая документация.  Отмечу лишь, что у GUI-я вырисовалась одна очень неприятная особенность: хотя, судя по опциям, программа должна уметь, учуяв в зоне действия голубозуба телефон, запомненный в настройках, запускать на управление сервер, указанный в этих самых настройках, она этого не делает. Чтобы чем-то поуправлять, нужно вручную выбрать в списке нужный сервер и даблкликнуть на нем. Тогда он перейдет в состояние "Управляется", и телефон этот сервер увидит и даст подключиться. 
Избежать такой вселенской несправедливости можно, запустив anyremote напрямую, в обход фронтенда. А чтобы иметь возможность управления несколькими приложениями, можно запустить несколько копий anyremote с разными конфигурационными файлами. Для упрощения и автоматизации этого процесса я накидал вот такой вот скриптик: 
#!/bin/bash

AR=/usr/bin/anyremote
CFGDIR=/usr/share/anyremote/cfg–data/Server–mode/
CONNECT=bluetooth
CHAN=20
USER=delayer
for PROG in mplayer vlc tvtime fileManager2 amarok
do
if [ –e $CFGDIR/$PROG.cfg ]; then
$AR –s $CONNECT:$CHAN –u $USER –name $PROG –f $CFGDIR/$PROG.cfg &
let "CHAN += 1"
echo $CHAN
else
echo "Для запуска управления программой $PROG не найден конфигурационный файл $PROG.cfg!"
fi
done
Запускаются пять серверов, которые java-клиент находит в зоне действия и может подключиться к любому выбранному. Anyremote позволяет запускать, контролировать и закрывать приложения, управление которых организуется. 
Да, разработчиками предлагается конфигурация типа all-in-one, где одним сервером запускается интерфейс управления сразу несколькими программами. Но у меня подружиться с этим не вышло: на отдельных конфигах сабжевые проги управляются стабильнее и проще. Именно поэтому был избран путь запуска отдельного процесса anyremote для каждого сервера.
Have fun! $)
P.S. Если при выполнении скрипта шелл говорит, что знать не ведает, что такое let, следует набрать от имени суперпользователя dpkg-reconfigure dash, ответив отрицательно на появившееся окно. Таким образом системе явно будет указано не использовать dash (который не знает о let, ибо это встроенная команда в bash) в качестве шелла по умолчанию.