![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Что имеем:
1. В https://bugs.launchpad.net/ubuntu/+source/linux/+bug/653524 описано как победить проблему сна на AO521. Kоманды s2ram --force (суспенд) и s2disk (хибернейт) работают! Hibernate работает лучше чем суспенд. Суспенд иногда глючит и не выходит из сна(с открытыми драйверами radeon).
2. При закрытии крышки статус таки сохраняется в /proc/...
Для более надежной работы hibernate создаем 2 swap раздела. Один собственно для сваппинга системы, второй для хибернейта(в моем примере - sda3). Сваппинг активируем, а хибернейтовский раздел - нет. Будем активировать только при хибернейте, чтоб ненароком туда не записалось что-то из сваппинга системы...
Решение:
1. Делаем такой скрипт lid.pl:
#!/usr/bin/perl
# Control LID state and hibernate for netbook Acer AO521
# (c) Mishchenko Alexander Stepanovych, 2011
# This software is free. It is licensed under GPL.
my $device='/dev/sda3'; # Device for hibernating
my $tmp='/tmp/acpi-lid-tmp'; # Temporary file for state of lid now.
my $old='/tmp/acpi-lid-state'; # Saved state of lid
my $state,$state_old;
sub readstate
{
system ('cat /proc/acpi/button/lid/LID/state>'.$tmp);
open(F,$tmp);
$state=<F>;
close(F);
}
sub hibernate
{
system('swapon '.$device);
system('s2disk');
system('swapoff '.$device);
}
while()
{
readstate();
if (-e $old)
{
open(F,$old); #read saved state
$state_old=<F>;
close(F);
if (($state=~/closed/) && ($state_old=~/open/)) #if state changed to closed
{
hibernate();
}
}
else
{
open(F,'>'.$old);
print F $state;
close(F);
$state_old=$state;
}
sleep(2); #Pause for 2 sec. Test state every 2 sec.
}
2. Даем права на запуск.
3. Вставляем запуск этого скрипта в rc.local и перезагружаемся...
4. Все ок.
5. Дополнительно: в цикле можно сделать проверку на то, что запущено какое-то приложение и не засыпать, если оно есть. Плюс другие варианты (играет плэйер, а не в паузе и т.д.).
1. В https://bugs.launchpad.net/ubuntu/+source/linux/+bug/653524 описано как победить проблему сна на AO521. Kоманды s2ram --force (суспенд) и s2disk (хибернейт) работают! Hibernate работает лучше чем суспенд. Суспенд иногда глючит и не выходит из сна(с открытыми драйверами radeon).
2. При закрытии крышки статус таки сохраняется в /proc/...
Для более надежной работы hibernate создаем 2 swap раздела. Один собственно для сваппинга системы, второй для хибернейта(в моем примере - sda3). Сваппинг активируем, а хибернейтовский раздел - нет. Будем активировать только при хибернейте, чтоб ненароком туда не записалось что-то из сваппинга системы...
Решение:
1. Делаем такой скрипт lid.pl:
#!/usr/bin/perl
# Control LID state and hibernate for netbook Acer AO521
# (c) Mishchenko Alexander Stepanovych, 2011
# This software is free. It is licensed under GPL.
my $device='/dev/sda3'; # Device for hibernating
my $tmp='/tmp/acpi-lid-tmp'; # Temporary file for state of lid now.
my $old='/tmp/acpi-lid-state'; # Saved state of lid
my $state,$state_old;
sub readstate
{
system ('cat /proc/acpi/button/lid/LID/state>'.$tmp);
open(F,$tmp);
$state=<F>;
close(F);
}
sub hibernate
{
system('swapon '.$device);
system('s2disk');
system('swapoff '.$device);
}
while()
{
readstate();
if (-e $old)
{
open(F,$old); #read saved state
$state_old=<F>;
close(F);
if (($state=~/closed/) && ($state_old=~/open/)) #if state changed to closed
{
hibernate();
}
}
else
{
open(F,'>'.$old);
print F $state;
close(F);
$state_old=$state;
}
sleep(2); #Pause for 2 sec. Test state every 2 sec.
}
2. Даем права на запуск.
3. Вставляем запуск этого скрипта в rc.local и перезагружаемся...
4. Все ок.
5. Дополнительно: в цикле можно сделать проверку на то, что запущено какое-то приложение и не засыпать, если оно есть. Плюс другие варианты (играет плэйер, а не в паузе и т.д.).