пятница, 22 мая 2009 г.

MPlayer и xscreensaver

Проблема 1

Для проигрывания видео на компьютере я использую mplayer в качестве плеера. Лёгкий и удобный, а больше ничего и не надо. Всё бы ничего, но была проблема со скринсейвером. Если просто при дефолтных настройках запустить фильм, то через определённое время включится хранитель экрана. Очевидно должно быть решение, конечно не дело каждые 10 минут двигать мышкой. Раньше (версию mplayer уже не скажу) всё относительно успешно решалось опцией -stop-xscreensaver.

mplayer -stop-xscreensaver movie.avi
Или, чтобы каждый раз не печатать эту опцию, можно прописать в конфиге ~/.mplayer/config:
stop-xscreensaver=1
После этого действительно заставка не включалась во время воспроизведения фильма. Если же воспроизведение приостанавливалось на некоторое время, то включалась заставка во время паузы. После того, как воспроизведение запускалось вновь, скринсейвер вновь начинал маячить перед глазами с уже до боли знакомой периодичностью. Меня это в своё время начало капитально бесить - ещё бы плеер и скринсейвер уже просто «динозавры», а так и не научились жить вместе. Кстати, в последнее время stop-xscreensaver=1 перестал работать. Здесь есть решение, но оно неидеальное - тормоза страшные, как говорят разработчики mplayer из-за багов xscreensaver.

Решение проблемы 1

Я подумал, а так ли мне нужен скринсейвер? Вообще-то, всё, что мне от него требовалось - это чтобы экран через определённое время гасился, не более того. А в Linux за это отвечает DPMS (технология, позволяющая управлять питанием монитора, когда компьютер не используется). Стало быть, настроив DPMS, можно избавиться от скринсейвера. Более того, как оказалось тогда, mplayer прекрасно взаимодействует с DPMS, а именно, во время воспроизведения не включается независимо от предыстории, в отличие от xscreensaver. Собственно, то, что надо.

Настраиваем DPMS

В Debian Lenny настраивать DPMS следует правкой файла xorg.conf следующим образом. В раздел "Monitor" добавим строку Option "DPMS" "true":

Section "Monitor"
        Identifier      "Configured Monitor"
        DisplaySize 339 271
        Option  "DPMS" "true"  # то, что добавили
EndSection
А затем, если нет, создадим раздел "ServerFlags" со следующим содержанием:
Section "ServerFlags"
        Option "StandbyTime" "5"
        Option "SuspendTime" "20"
        Option "OffTime" "30"
EndSection
Значения для режима ожидания, спящего режима и отключения, соответственно, указываются в минутах. Во многих руководствах говорится о том, что последние строки надо добавлять в раздел "ServerLayout", однако у меня после такого добавления не стартовали иксы. Может, версия xorg (1:7.3+18), а может именно Debian имеют отличную настройку. В любом случае, man Xorg об этом говорит.

Итак, в результате, кино играет, экран не гаснет именно во время воспроизведения. Как всё здорово... было до недавних пор. По всей вероятности, mplayer обновился, принеся ещё одну проблему.

Проблема 2 и её решение

После обновления mplayer (как мне кажется) стал тухнуть экран во время воспроизведения. Немного погуглив и обнаружив, что в современном мире люди бьются с проблемами xscreensaver использованием опции heartbeat-cmd="xscreensaver-command -deactivate", я протестировал следующую команду:

mplayer -heartbeat-cmd="xset dpms force on" movie.avi
В результате получил то, что надо - экран не гаснет во время воспроизведения, а когда воспроизведение останавливается на длительное время - гаснет вновь. После выключения фильма система DPMS продолжает работать.

Для полного счастья осталось прописать в конфиге ~/.mplayer/config искомую строку:

heartbeat-cmd="xset dpms force on"

Вот и всё, теперь во время просмотра фильма вы будете видеть фильм, а не чёрный экран и не прыгающие квадратики. Интересно, надолго ли… Не взбредёт ли в голову разрабам опять что-то поменять? :)

Если вы всё-таки жить не можете без скринсейвера

Если скринсейвер нужен, то, быть может сработает опция heartbeat-cmd="xscreensaver-command -deactivate &". Знак амперсанда в конце строки обязателен, иначе будут тормоза, по крайней мере, где-то высказывались так на просторах инета. Без амперсанда тормоза действительно есть, но этот вот рецепт сам не пробовал.

Копируете статью - поставьте ссылку на оригинал!

3 комментария:

  1. Большое спасибо за примечание про амперсанд. На самом деле без него страшные тормоза при воспроизведении. А то я уже было отчаялся найти решение своей проблемы... В общем-то уже догадываюсь, по какой причине без него тормозит. (:

    ОтветитьУдалить
  2. Пасиба, про dpms это хорошо придумано... 3 часа по гуглу искал - нашёл только тут. Теперь всё работает. : )

    ОтветитьУдалить
  3. Рад помочь!
    Я тоже до этого не так быстро дошёл :)

    ОтветитьУдалить