Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Продолжаем башить: отучаем экран засыпать во время просмотра фильмов  (Прочитано 1341 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ivanxstupid

  • Автор темы
  • Новичок
  • *
  • Сообщений: 40
    • Просмотр профиля
Добрый день, дорогие убунтоводы!

Решил побороть надоедливую проблему с отключением экрана посреди просмотра кино :idiot2:
Как обычно, взял для этой цели баш, немного разбавленный седом и, подумав, надумал вот что:
так или иначе, любой проигрыватель мультимедиа это процесс или часть процесса, следовательно,
его активность можно отловить, раз уж система не в состоянии понять что это, как бы поточнее
выразиться... «активная активность», а не «пассивная активность». Таким образом, если написать
демон, настроенный на «отлов» активности плеер-плагинов 3—4 самых распространенных браузеров
и 5—7 самых распространенных же проигрывателей, то получится универсальный сценарий, который
решит проблему (по крайней мере для GNOME).

Провозившись часа 4 я наваял рабочий демон, но предупреждаю он длинноват, вот текст:
#!/bin/bash
# This is a fix for the GNOME sleep-display feature
# it will prevent your screen from going to sleep
# while you are running multimedia on your laptop


# query-related data (this section can be expanded)
# Rl state code is used to determine if multimedia
# is currently playing or paused/stopped
chrom='Rl.*chrome --type=ppapi'
frfox='Rl.*libflashplayer.so'
# foo='Rl.*bar'
# baz='Rl.*quux'

# player plugin activity flag
ppf=0


# retrieving user-specified idle delay values (once)
ssval=`gsettings get                                             \
       org.gnome.desktop.session                                 \
       idle-delay`                                               \
       | grep -o '[0-9]*$'
acval=`gsettings get                                             \
       org.gnome.settings-daemon.plugins.power                   \
       sleep-display-ac`
btval=`gsettings get                                             \
       org.gnome.settings-daemon.plugins.power                   \
       sleep-display-battery`


while [ "1" -eq "1" ]; do
    # player plugin activity detection query
    query=`ps  -eo "stat,cmd"                                    \
         | grep -v "grep"                                        \
         | grep -o "$chrom"`
    if [ "$query" == "" ]; then
        query=`ps  -eo "stat,cmd"                                \
             | grep -v "grep"                                    \
             | grep -o "$frfox"`
    fi
    # more matching criteria can be used to expand this query
    # if [ "query" == "" ]; then query=`foobar`; fi
    # do not forget the Rl code!

    # handling player plugin activity flag
    prevppf="$ppf"
    rpt="5"
    if [ "$query" != "" ]; then
        let "ppf=1"
        let "rpt=30"
    else
        let "ppf=0"
    fi

    # execute the flollowing only if flag has changed
    if [ "$ppf" -ne "$prevppf" ]; then
    # retrieving current idle delay values
    ssidl=`gsettings get                                         \
           org.gnome.desktop.session                             \
           idle-delay`                                           \
           | grep -o '[0-9]*$'
    acidl=`gsettings get                                         \
           org.gnome.settings-daemon.plugins.power               \
           sleep-display-ac`
    btidl=`gsettings get                                         \
           org.gnome.settings-daemon.plugins.power               \
           sleep-display-battery`
    # saving idle delay values in case they have been changed
    if [ "$ppf" == "0" ]; then
        let "ssval=ssidl"
        let "acval=acidl"
        let "btval=btidl"
    fi


    if [ "$ppf" -eq "1" ]; then                                         # setting idle delay to infinite if player plugin is active...
        gsettings set                                            \
        org.gnome.desktop.session                                \
        idle-delay            "0"
        gsettings set                                            \
        org.gnome.settings-daemon.plugins.power                  \
        sleep-display-ac      "0"
        gsettings set                                            \
        org.gnome.settings-daemon.plugins.power                  \
        sleep-display-battery "0"
    else                                                                # restoring user-specified idle delay value if not
        gsettings set                                            \
        org.gnome.desktop.session                                \
        idle-delay            "$ssval"
        gsettings set                                            \
        org.gnome.settings-daemon.plugins.power                  \
        sleep-display-ac      "$acval"
        gsettings set                                            \
        org.gnome.settings-daemon.plugins.power                  \
        sleep-display-battery "$btval"
    fi
    fi

    echo  "$ppf"                                                        # testing
    sleep "$rpt"                                                        # repeat interval (5 seconds by default)
done

exit 0

Все работает исправно, нужно только добавить в автозапуск, НО пока только для Firefox и Chrome.
Собственно говоря, у меня обращение к сообществу: если у вас такая же проблема с каким-либо еще
плеером или плеер-плагином, приглашаю присоединиться ко мне и расширить функционал и на них,
в скрипте это раздел про query. Кроме того, если найдутся люди с предложениями по оптимизации
также буду очень благодарен.

Спасибо за внимание :)
« Последнее редактирование: 28 Сентября 2013, 15:20:40 от ivanxstupid »

 

Страница сгенерирована за 0.016 секунд. Запросов: 22.