Гибернация, Блокировка после пробуждения, Вопрос по скрипту.

Автор MaksFM, июля 14, 2015, 13:35:27

« предыдущая - следующая »

MaksFM

Гибернация на ПК под управлением Ubuntu, в моем случае Xubuntu 14.04, с видеокартой NVIDIA и проприентарными драйверами, работает в большинстве случаев очень и очень не стабильно, как я понял из статей в интернете. Собственно основная беда это чаше всего ошибка при засыпании, а иногда и пробуждении, гласящяя что-то вроде "NVIDIA: non-free". В ходе наблюдейний и различных рекомендаций найденных на просторах интернета я нашел решение, хоть и не полноценное, но исключившее более менее полностью появление данной ошибки. Решение было таким:

Утановить следующие значения в: /etc/defaults/acpi-support

MODULES="nvidia"
SAVE_VBE_STATE=false
POST_VIDEO=false
USE_DPMS=false
DISABLE_DMA=true


Добавил в Section "Device" в файле: /etc/X11/xorg.conf

option "NvAGP" "1"


Добавил в файл: /etc/modprobe.d/blacklist

blacklist agpgart


Найстроил использование утилиты s2disk из пакета uswsusp по инструкции - http://help.ubuntu.ru/wiki/%D1%81%D0%BF%D1%8F%D1%89%D0%B8%D0%B9_%D1%80%D0%B5%D0%B6%D0%B8%D0%BC. Хотя это не существенный момент.

Эти настройки устранили примерно 30% возникновения данной ошибки, а оставшиеся 70% исправило отключения опции Lock on suspend. При том блокировка при гибернации/засыпании это основная причина возникновения этой ошибки, как я понял блокировка наступает на хвост гибернации и не дает закончит ее операции, возможно не дает выгрузить модуль nvidia из ядра или обратиться к нему, не могу точно сказать, такими тонкими познаниями в данном вопросе не обладаю. Но то что это основная причина подтвердили мои наблюдения.

В сухом остатке получилась почти 100% стабильно работающая гибернация, но без блокировки, что для меня все же не самый лучший вариант ввиду того, что используется это все на ноутбуке, который постоянно переносится и в целях безопасности хотелось бы чтобы при выходе из гиберниции/сна все же был заблокированным.

Ковырять исходниги и искать суть проблеммы для меня не представляется возможным, в меру моих знаний. По этой причине я решил сделать небольшой костыль так сказать, раз уж блокировка вызывает ошибки на этапе гибернации/засыпания, то стоит попробовать ее выполнить на этапе пробуждения. Поступил следующим образом в папку /etc/pm/sleep.d добавил скрипт cодержащий следующий код:

#!/bin/sh

case "${1}" in
    suspend|hibernate)
        service network-manager stop &>/dev/null;
    ;;
    resume|thaw)
        xflock4;
        service network-manager start &>/dev/null;
    ;;
esac


Все казалось бы просто и должно работать если бы не тот факт, что он при соответствующих событиях выполнятеся от имени root'а и не приводит к блокировке моего сеанса. Далее я его модифицировал заменив прсто вызов xflock4; на su -c xflock4 username; или даже sudo -E -H -u username xflock4; , но увы и ах, к необходимому результату это не привело, собственно отсюда и появляется мой вопрос почему это не работает, а лучше как нужно скорректировать скрипт, чтобы он начал блокировать сессию необходимого пользователя.

На все подсказки, ответы буду признателен. Так же добавлю что xflock4 это всего лишь фасад для возможно установленных локеров, в моем случае используется light-locker 1.4.0-0, но он особо не имеет каких-либо ключей которые могли существенно повлиять на его поведение, xflock4 просто вызывает light-locker-command -l и все. )-:

Надеюсь на вашу помощь.