Как отключить Ubuntu после (2 часа) простоя?

Работает: Xubuntu 14.04 32bit.

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

Я также попытался установить complexshutdown, несмотря на то, что этот инструмент умер в 2011 году и содержит ошибку на Lauchpad, из-за которой его точная опция недоступна. Это даже не установлено 14.04 здесь.

Так что, если я могу задать этот вопрос снова без наказания "дубликатом" ...

Я ищу простой прямой скрипт, который на самом деле протестирован и работает, и который я могу вставить в автозапуск, который ничего не делает, кроме проверки активности (мышь / клавиатура) и выключения моего ноутбука, если его не было в течение 2 часов.

Благодарю.

5 ответов

Решение

Это, наверное, лучшее решение. Нет необходимости для настройки экрана и запуска.

устанавливать sudo apt-get install xprintidle

Поместите этот скрипт в автозапуск:

#!/bin/bash

idletime=$((1000*60*60*2)) # 2 hours in milliseconds

while true; do
    idle=`xprintidle`
    echo $idle
    if (( $idle > $idletime )); then
        #sudo shutdown -P now
        dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.PowerOff" boolean:true
    fi
    sleep 1
done

Комментарии и ответ @Jobin заставили меня снова исследовать себя, и я действительно нашел незаконченный сценарий с xprinttime но без какого-либо цикла в сценарии. Вероятно, не закончил это, потому что мои знания Linux/ Bash не были хорошими в то время. Я также поместил скрипт, который был у меня в rc.local, или что-то в этом роде, вызвав выключение при загрузке. Спасибо @Jobin за напоминание о том, как добавлять загрузочные приложения в XFCE, я уже знал это, но... и благодарности за штуку с dbus, никогда не видел этого, лучше, чем завершение работы, поскольку он не требует root.

Это старый вопрос, но я решил ответить на него тем, что работает для меня в Ubuntu 21.04. Вы можете установить IdleActionв твоей systemd/logind.confфайл.

Отредактируйте файл, используя:

      sudo nano /etc/systemd/logind.conf

и добавить:

      IdleAction=poweroff
IdleActionSec=120min

Я проверил это с IdleActionSec=1minи машина выключается, как и ожидалось.

После просмотра ряда вариантов выключения после определенного времени бездействия, кажется, что xautolock это самый простой способ. Все благодарности Sparhawk за упоминание о xautolock ,

Спасибо user.dz за указание на xscreensaver. Используя xscreensaver, я мог вручную указать, что делать после определенного периода бездействия. Чтобы использовать xscreensaver, вам необходимо установить его с помощью:

sudo apt-get install xscreensaver

или установите его из центра программного обеспечения, а затем запустите его один раз, используя:

xscreensaver-demo

или наберите "xscreensaver" на панели инструментов и откройте "Заставка".

Это создаст ~/.xscreensaver файл. Откройте его и найдите строку:

programs:                                                                     \

и добавить:

dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.PowerOff" boolean:true \n\

чуть ниже

programs:                                                                     \

линия.

Вы можете указать время, по истечении которого должно выполняться отключение, изменив строку, начиная с timout, Изменить его на

timeout:        2:00:00

отключить через два часа.

Взгляни на мой .xscreensaver файл здесь.

Это должно отключить компьютер после двух часов бездействия или в любое другое время, указанное в сценарии.

Заметки:

  • Посмотрите на этот вопрос, чтобы увидеть, как добавить xscreensaver при загрузке.

  • Я пытался использовать сложное отключение, но ошибка здесь, кажется, влияет на меня, поэтому не могло произойти. В противном случае для этого было бы доступно графическое приложение.

  • Это может быть достигнуто с помощью xautolock, однако, как указывает redanimalwar, тайм-аут, превышающий 1 час, невозможен без изменения его исходного кода и перекомпиляции.

Это мой упрощенный скрипт, для этого необходимо, чтобы вы установили пакет "xprintidle" и изменили команду shutdown, чтобы можно было запускать без sudo/password.

sudo chmod u+s /sbin/shutdown
sudo apt-get install xprintidle

скрипт

#!/bin/bash
idletime=$((15*60*1000)) # 15 min in milliseconds
idle=0

while [ $idle -lt $idletime ];do
    idle=`xprintidle`
    sleep 1
done
shutdown -P now

Изменен скрипт @redanimalwar, чтобы предупредить пользователя и дать возможность отменить выключение. Для тестов используется 3 секунды и простое сообщение. Пожалуйста, настройте на свой вкус. НТН.

#!/bin/bash
#https://Ask-ubuntu.ru/questions/442795/
#http://ubuntuforums.org/showthread.php?t=2172828

function showProgress(){
#
# Force Zenity Status message box to always be on top.
sleep 1 && wmctrl -r "Progress Status" -b add,above &

(
echo "# Shutting Down in 5" ; sleep 2
echo "25"
echo "# Shutting Down in 4" ; sleep 2
echo "50"
echo "# Shutting Down in 3" ; sleep 2
echo "75"
echo "# Shutting Down in 2" ; sleep 2
echo "99"
echo "# Shutting Down in 1" ; sleep 2
echo "# Shutting Down now" ; sleep 2
echo "100"

) |
zenity --progress \
  --title="Progress Status" \
  --text="First Task." \
  --percentage=0 \
 --auto-close

return $?

}


#idletime=$((1000*60*60*2)) # 2 hours in milliseconds
idletime=$((1000*3)) # test, 3seconds

while true; do
    idle=`xprintidle`
    echo $idle
    if (( $idle > $idletime )); then
        showProgress && \
        #sudo shutdown -P now
        #dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.PowerOff" boolean:true
        #echo for tests. use command above to actually shutdown
        echo shuting down the system. Just kidding  ^_^ \
        && exit 0
    fi
    sleep 1
done
Другие вопросы по тегам