Pull to refresh

Управляем Rhythmbox'ом по ssh

Reading time5 min
Views3.3K
rhythmbox logo

Казалось бы, чего тут сложного. Даже сам 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, который дальше будет висеть, а мы зайдя по ssh сможем подключиться к нему и управлять запущенным rhythmbox'ом. Сейчас же, как подсказал в комментариях уважаемый KeksSW, можно запустить команду с переменной окружения DISPLAY=:0, и тогда без проблем выполниться клиентская часть и действительно можно просто управлять rhythmbox'ом по ssh без трюков, которые я дальше рассписываю. Они могут понадобиться если вы решили просто команды управления запихнуть в shortcut'ы.

И так, продолжим.
Потестив весь вышеизложенный план в консоле и убедившись, что всё работает так как и запланировано, пришло время наводить красивости. Например, что бы вызвать не активную сессию screen, с запущенным из неё rhythmbox, нужно выполнить такую вот команду:

user@host:~$ /usr/bin/screen -D -m -S box rhythmbox-client

Два пояснения, я указал прямой путь до screen'а, т.к. у вас он может быть установлен в другое место, или если вы его собирали сами (… хотя тогда я сомневаюсь, что данная публикация будет Вам вообще интересна =). И при отсутствии запущенного rhythmbox'а запуск rhythmbox-client'а приведёт к старту самого проигрывателя (по крайней мере так было у меня на Ubuntu 9.04).

Ну не запускать же каждый раз ручками проигрыватель, правда? Можно написать альяс, который будет это делать. Но если уж совсем по-ленивому, то можно сделать иконку launcher'а на GNOME'вской понельке. И тогда для запуска самого проигрывателя потребуется только лениво дотянуться до мышки, лениво же подвинуть указатель на иконку, ну и уж совсем из последних сил просто восхищаясь своим упорством и целеустремлённостью — кликнуть на неё один раз ( тут главное не перетрудиться… Зачем щёлкать два раза, это же почти в два раза больше работы, так?).

launcher


При этом создаётся сессия 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 на передней панеле имеется набор медиа-клавиш, которые я почти не использую на самом компьютере, поэтому решил на них и повесить нужные мне команды.

launcher


В принципе это уже всё. Можно только добавить, что если вы не сделали этого раньше, то разрешите доступ к удалённому хосту по ssh без введения пароля каждый раз. Это можно сделать следующим образом:

user@host:~$ ssh-copy-id user@host

У Вас запросится пароль пользователя на удалённом компьютере. Если у Вас уже сгенерированный ключи, то public key будет скопирован с локальной машины в authorized_keys файл на удалённой машине. Если же выдалась ошибка об отсутствии ключей — можно их быстро создать:

user@host:~$ ssh-keygen

и далее по инструкции. Passphrase лучше не задавать. Так как потом придётся её вводить каждый раз.

На этом всё. Спасибо за внимание.

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

launcher


ЗЫЫ: После трёх проведённых часов за этим постом понимаю — что единственно ценным в нём является скрипт, рисующий картинку просмотра с главной страницы хабра и число просмотров от людей таки заглянувших под хабракат. Рейтинг получился очень не высоким, но и не упрыгал в минуса. Значит мы получаем очень хорошую точку для статистического анализа. Т.е. многие картинку, количество запросов к которой я и считал, получали через RSS'ы или просто быстро просматривая хабр с утра… можно получить интересную статистику, если собрать такую же информацию с «удачного» топика. Но это в следующий раз, если повезёт =)

ЗЫЫЫ: Ну пожалуй всё. Скрипт, рисующий статистику посещения довёл до состояния бетты. Т.е. он рисует количество запросов в минуту. Как видно, можно отследить попадание поста на главную, отход на вторую страницу и т.д. Здорово!
Tags:
Hubs:
+18
Comments21

Articles