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

    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'ы или просто быстро просматривая хабр с утра… можно получить интересную статистику, если собрать такую же информацию с «удачного» топика. Но это в следующий раз, если повезёт =)

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

    Комментарии 21

      +6
      А кто мешает использовать MPD + GUI?
      Там все сразу и без плясок
        0
        Про MPD рашье не знал — спасибо. Интересный проэкт. Только вот ГУЁв под него сразу найти не получилось. Может я не там ищу?
        Ни у в оправдание хотелось бы ещё сказать, что rhythmbox обладает целым набором положительных черт. Он лёгок на подъём, система плагинов с вполне приличным функционалом, каталогизация и плейлисты, и, что не самое последнее, сносная работа с iPOD'ами.
          0
          Гуев под него чуть более чем много. Я предпочитаю Sonata
            0
            Sonata мне тоже понравилась. Подмывало кинуть сюда её screenshot, но тогда это получиться полный оффлейм.
              0
              Сам частенько юзаю МПД и сонату — экономия трафика в локальной сети + удобный доступ к плейлисту с любого компа в сети.
              0
              У MDP и Rhytmbox немного разная идеология, следовательно и области применения немного разные :)

              На мой взгляд — Sonata лучший GUI на GTK+ для MPD.
                0
                Если я правильно понял, то MPD удобно ставить на медиацентры и файловые хранилища, с которых потом можно проигрывать музыку на всю квартиру/дом/квартал (нужное подчеркнуть). А gui — это просто приложение для управлением этим демоном с любой удалённой машины. Я угадал?
                Ой! «Avahi/Zeroconf support» а вот это особенно порадовало. Всё — проэкт на завтра, заводим свой трактор с блекджеком.
                  0
                  Верно. Но ведь можно запустить клиент и сервер на одной машине :)
            +7
            Я дико извиняюсь, но вся эта пляска со скринами — ради того чтобы не назначать номер дисплея в окружении?
            DISPLAY=:0 rhythmbox-client --next
              +2
              Вот за что люблю хабр, обязательно найдётся и третий и четвёртый вариант показать всем как можно лапухнуться (я про себя)…
              Действительно работает. Спасибо, мил человек. Одной проблемой меньше.

              Хотя я научился передавать команду сессии скрина, это тоже полезный навык для моих симуляций на блейдами. (это я опять просто так бурчу, что бы хоть как-то оправдаться =)
                0
                ваше статья ээто такой маленький мануал по screen'у :)
                  +1
                  первое сообщение об X11 initalization как бы прозрачно намекает. собсна после хабраката я как раз и ожидал увидеть про выставление DISPLAY

                  но и совсем уж чтобы показать автору насколько он несмышленый. открываешь гугл, там поле поиска, туда выбиваешь «failed to autolaunch D-Bus session: Autolaunch error: X11 initialization failed.» щелкаешь по первой(!!!) ссылке. в пятом посте есть ответ про дисплей. на это ушла минута времени. Fucking use google.
                  0
                  Не работает фокус.
                  +1
                  Извиняюсь за оффтоп, но слышал, что есть версия Evolution под Windows, я её правда не пробовал, но на сайте гнома какие-то надписи билды по этому поводу вроде бы были. Так вот есть ли Rhythmbox под Windows?
                    0
                    mpd + sonata (или ncmpcpp, по вкусу) в руки тебе, мил человек.
                      0
                      Господа, вы не поймите меня не правильно и не подумайте, что я хочу чмырить кого-то, но я действительно не понимаю зачем?)
                        0
                        Твой большой компьютер в комнате играет веслую музыку через большие колонки, а ты сидишь на кухне пьёшь чай\пиво и т.д. Если надо нажать паузу или переключить песню не обязательно бежать в комнату, чтобы переключать, можно нажать медиа-кнопочку «next» на своём нетбуке.
                          0
                          Как вариант делаю так:

                          Всю музыку расшариваем в daap. (mt-daap)

                          Играем на том компьютере, который сейчас под рукой, а выводим черех pulsaudio на компьютер с нужными колонками. (pavucontrol, padevchooser ...)

                          avahi в этом не плохо помогает.
                            0
                            Да, способов управлять плеером компьютера очень много, мне например, нравится с телефона по блютузу. Просто человек не понимал профита и я ему попытался прояснить в чем смысл.
                      • НЛО прилетело и опубликовало эту надпись здесь
                        • НЛО прилетело и опубликовало эту надпись здесь

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое