Казалось бы, чего тут сложного. Даже сам rhythmbox обладает программой-спутником rhythmbox-client, которая принимает аргументом простые команды утравления этим замечательным проигрывателем. Но не всё так просто, как хотелось бы. При заходе по ssh на удалённую машину, на которой играет rhythmbox и вызыве этой самой программы, например так:
user@host:~$ rhythmbox-client --play
(rhythmbox-client:32434): Rhythmbox-WARNING **: dbus-launch failed to autolaunch D-Bus session: Autolaunch error: X11 initialization failed.
мы видим не самое приятное сообщение. Как минимум, у нас не получается инициализировать Х11.
А мы всего-то и хотели, что включить play в уже запущенном rhythmbox. Хотя мы могли сделать много чего, например:
user@host:~$ rhythmbox-client --help Использование: rhythmbox-client [OPTION...] Опции: -?, --help Показать помощь (опции) Опции Приложения: --debug --no-start Не запускать новую копию rhythmbox --quit Выйти из Rhythmbox --no-present Не представлять существующее Rhythmbox окно --hide Спрятать Rhythmbox окно --next Следующая песня --previous Предыдущая песня --notify Показать уведомление о текущей песни --play Продолжить проигрывание --pause Пауза --play-pause Переключиться между паузой и проигрыванием --play-uri=URI to play Проиграть указанный URI, импортировать его если необходимо --enqueue Добавить трек в очередь проигрывания --clear-queue Очистить очередь проигрывание перед добавлением трека --print-playing Вывести название трека и имя исполнителя текущей композиции --print-playing-format Вывести форматированную информацию о треке --set-volume Установить громкость (1.0 макс) --volume-up Увеличить громкость --volume-down Уменьшить громкость --print-volume Вывести текущую громкость --mute Отключить звук --unmute Включить звук
Как видно из списка — опций не то, что бы уж очень много. Скажем, нету переключателя между повтором и случайным/последовательным списком треков. Но это базовый набор команд, которого вполне может хватить, что бы переключить уже порядком поднадоевший трек, к которому всё никак не дотянуться руки стереть вообще с винчестера.
Если, ради эксперимента, мы подключим виртуальный X11 с передачей его по ssh, это делается просто заходом на удалённый host с опцией -X. Т.е. приложение целиком будет выполняться на удалённом хосте (host), а вам по ssh будут передаваться и отрисовываться примитивы X11.
user@localhost:~$ ssh -X user@host
Но таким образом тоже не получается управлять rhythmbox'ом. Просто вызывается копия программы, которая (при слабом канале) будет жутко долго отрисовываться на вашем компьютере, с которого вы делали ssh. Т.е. задача сводиться к тому, что бы запустить rhythmbox и потом управлять им из rhythmbox-client из одного X11 дисплея. Я
И так, продолжим.
Потестив весь вышеизложенный план в консоле и убедившись, что всё работает так как и запланировано, пришло время наводить красивости. Например, что бы вызвать не активную сессию screen, с запущенным из неё rhythmbox, нужно выполнить такую вот команду:
user@host:~$ /usr/bin/screen -D -m -S box rhythmbox-client
Два пояснения, я указал прямой путь до screen'а, т.к. у вас он может быть установлен в другое место, или если вы его собирали сами (… хотя тогда я сомневаюсь, что данная публикация будет Вам вообще интересна =). И при отсутствии запущенного rhythmbox'а запуск rhythmbox-client'а приведёт к старту самого проигрывателя (по крайней мере так было у меня на Ubuntu 9.04).
Ну не запускать же каждый раз ручками проигрыватель, правда? Можно написать альяс, который будет это делать. Но если уж совсем по-ленивому, то можно сделать иконку launcher'а на GNOME'вской понельке. И тогда для запуска самого проигрывателя потребуется только лениво дотянуться до мышки, лениво же подвинуть указатель на иконку, ну и уж совсем из последних сил просто восхищаясь своим упорством и целеустремлённостью — кликнуть на неё один раз ( тут главное не перетрудиться… Зачем щёлкать два раза, это же почти в два раза больше работы, так?).
При этом создаётся сессия screen с именем box, в нём запускается rhythmbox-client, и сессия деаттачиться (отсоединяется, если быть совсем точным, то она никогда и не присоединяется, а так и возникаем в пассивном режиме).
Пожалуй, самым простым способом создать иконку на панельке является перетаскивание из меню Applications (Приложения) самой иконки rhythmbox'а на панель. Так Вам не придётся мучиться с выбором картинки, а останется только поменять строку кода выполнения на указанный выше. И мы готовы к запускам проигрывателя в отдельной screen сессии.
Далее ещё более интересный трюк. Нам необходимо с другого компьютера зайти на наш host с запущенным на нём rhythmbox'ом и отослать команду в сессию screen'а, по возможности не интерактивно, а совсем даже наоборот, пассивно (через pipe или опцией к screen).
Man screen'а утверждает, что опция -X должна отослать сессии команду на выполнение. Как я не выкручивался — у меня не получалось этого сделать. Пока умные товарищи на linux.org форуме не подсказали, что эта опция передаётся с ещё одним дополнительным аргументом. Например если набрать:
user@host:~$ screen -r box -X stuff а тут какой-то совсем странно-непонятный текст для сессии скрина
то этот текст просто передастся в сессию, как будто вы набирали его с клавиатуры. Но нажать кнопочку Enter за лично Вас так не получиться. Но можно отослать вместо stuff опцию на выполнение команды. И как не сложно догадаться опция будет называться exec. Т.е. в конечном итоге, команда для запуска с локальной машины для изменения трека на следующий на удалённом хосте будет такой:
user@host:~$ ssh user@host screen -r box -X exec rhythmbox-client --next
А можно ещё и присвоить эту команду какой-нибудь быстрой клавише. У меня на Vostro 1500 на передней панеле имеется набор медиа-клавиш, которые я почти не использую на самом компьютере, поэтому решил на них и повесить нужные мне команды.
В принципе это уже всё. Можно только добавить, что если вы не сделали этого раньше, то разрешите доступ к удалённому хосту по ssh без введения пароля каждый раз. Это можно сделать следующим образом:
user@host:~$ ssh-copy-id user@host
У Вас запросится пароль пользователя на удалённом компьютере. Если у Вас уже сгенерированный ключи, то public key будет скопирован с локальной машины в authorized_keys файл на удалённой машине. Если же выдалась ошибка об отсутствии ключей — можно их быстро создать:
user@host:~$ ssh-keygen
и далее по инструкции. Passphrase лучше не задавать. Так как потом придётся её вводить каждый раз.
На этом всё. Спасибо за внимание.
ЗЫ: надеюсь мой рабочий комп потянет нагрузку с отдачей картинок для хабра. И что бы он это делал не зря, вот динамически прорисовываемая картинка о доступе к контенту на главной и после хабраката. Знаю, что пару дней назад уже один молодой человек что-то подобное мастерил, но я преследую свои цели, да и графики, если честно, были там не ахти. Пока не был включён фильтр по IP, т.е. многократный доступ считается разными посещениями. Далее думаю добавить фильтрацию — это даст лучшее представление о картине происходящего.
ЗЫЫ: После трёх проведённых часов за этим постом понимаю — что единственно ценным в нём является скрипт, рисующий картинку просмотра с главной страницы хабра и число просмотров от людей таки заглянувших под хабракат. Рейтинг получился очень не высоким, но и не упрыгал в минуса. Значит мы получаем очень хорошую точку для статистического анализа. Т.е. многие картинку, количество запросов к которой я и считал, получали через RSS'ы или просто быстро просматривая хабр с утра… можно получить интересную статистику, если собрать такую же информацию с «удачного» топика. Но это в следующий раз, если повезёт =)
ЗЫЫЫ: Ну пожалуй всё. Скрипт, рисующий статистику посещения довёл до состояния бетты. Т.е. он рисует количество запросов в минуту. Как видно, можно отследить попадание поста на главную, отход на вторую страницу и т.д. Здорово!