Можно ли перевести X в спящий режим, оставив остальную систему без сна?

Представьте себе компьютер с двумя функциями:

  1. Файловый сервер и локальный веб-сервер, требуется 24/7.
  2. Графический сервер для медиацентра, требуется только тогда, когда его кто-то использует.

Я подумываю о создании такой машины, поэтому позвольте мне выкинуть несколько дисков из моего невероятно энергоемкого рабочего стола и заменить наш медленный медиацентр 2-го поколения Atom.

Проблема с этой сборкой в ​​том, что XBMC - зверь, питающийся энергией. Оставленный на своих собственных устройствах, процессор никогда не войдет в состояние, близкое к спящему. Вещи улучшились, но единственный способ быть эффективным - это положить его в сон S3. Очевидно, что это закрывает все, что работает. В настоящее время мы просыпаемся через USB (ИК-приемник).

S3 Спать невозможно на новой машине, потому что я хотел бы, чтобы она работала на сервере, но я хотел бы перевести X-сервер (и все его клиенты) в спящий режим. Если это возможно. Так ли это?

Если это не удастся, я всегда могу выйти из X, но это приведет к потере состояния XBMC, и я бы предпочел этого избежать. Если это единственный метод, можете ли вы предложить способ повторной инициализации X из ИК-команды? (И в пути, который не противоречит обработке IR в XBMC).

Примечание: Я полностью гибок с графическим стеком. В настоящее время X и nodm загружают автономную версию XBMC, но если вам нужно что-то еще, это нормально. Я также могу проверить это перед созданием новой машины (на текущей).

4
задан 24 May 2013 в 13:55

2 ответа

Приостановка дерева процессов.

Я на полпути. Я нашел kill -STOP <PID>, который останавливает процесс. Также есть версия CONT, которая пробуждает ее. Поэтому я могу найти STOP дерево процессов nodm с помощью этой сексуальной команды:

pstree -p $(ps ux | awk '/nodm$/ {print $2}') | grep -oP '\d+' | xargs kill -STOP

И мы можем разбудить все остановленные процессы (для текущего пользователя) с помощью:

ps ux | awk '$8 ~ /^T/ {print $2}' | xargs kill -CONT
[ 1122] Кажется, это действительно работает. Я только что проверил это, и я поражен тем, что ни X, ни XBMC, ни файл, который он воспроизводит по NFS (да, это работает в середине видео), похоже, не возражают, что его приостановили на пять минут.

Возобновление из IR

Это была следующая проблема - как я мог перезапустить эти процессы из IR? Для этого нам понадобится irexec, который может выполнить произвольную команду для любой кнопки, независимо от того, что еще слушает lirc.

Нам нужно несколько сценариев, чтобы это произошло. Сначала ~/.lircrc

begin
prog = irexec
button = *
config = ~/.resume &
end

и ~/.resume (для этого потребуется chmod +x ~/.resume запустить после его создания)

#!/bin/sh
ps ux | awk '$8 ~ /^T/ {print $2}' | xargs kill -CONT

Затем все, что нам нужно сделать, это загрузить irexec. Чтобы избежать зомбирования при выполнении команды STOP, мы должны исключить процесс из текущего дерева, которое упрощается с помощью setsid. В моем случае я добавляю следующее перед запуском xbmc в ~/.xsession:

setsid irexec

Последняя загадка: как я могу заставить XBMC запускать скрипт STOP вместо сна?

единственная часть, которую я не решил сейчас, - заставить XBMC выполнить команду вместо выключения. Работа в процессе. Единственный вариант, который я могу найти на данный момент, - это создание специальной заставки Python для XBMC, которая кажется действительно скучной (и я не могу заставить ее работать).

0
ответ дан 24 May 2013 в 13:55

Я не специалист по xbmc, но если он использует Lirc для перехвата IR-сообщений, вы можете добавить что-то подобное в файлы ~ / .licrc или / etc / lirc / lircrc для запуска ваших скриптов.

  begin wakeupwait
       button = OK (of course you may prefer to use another button for that purpose) 
       prog = irexec
       config = <your wake-up script path>
       quit
  end wakeupwait

  begin
       button = OK (same button) 
       prog = irexec
       config = <your pause script path>
       mode = wakeupwait
  end

некоторые документы:

irexec http://www.lirc.org/html/irexec.html

.lircrc http: //www.lirc.org/html/configure.html (параметр mode стоит прочитать)

Emmanuel

0
ответ дан 24 May 2013 в 13:55

Другие вопросы по тегам:

Похожие вопросы: