EDITADO: ATENÇÃO: não fiz muitos testes! Causa, às vezes, uma falha que faz o processo events/0 tomar 100% da CPU!Solução: descarregar o módulo rtl8187 configurando o pm-utils. Há algumas configurações específicas para o meu modelo Semp Toshiba IS-1454, mas acho que boa parte é comum a quem tem esse problema com o módulo rtl.
A seguir, os passos que usei para conseguir suspender e hibernar com sucesso (na maioria das vezes).
1) O primeiro problema é fazer o computador ir para o estado de suspensão. Para isso, é necessário remover o módulo da placa wireless:
Minha primeira tentativa foi criar o arquivo
/etc/pm/config.d/10semp_toshiba_workarounds com o seguinte conteúdo:
SUSPEND_MODULES="rtl8187"
SUSPEND_MODULES faz com que o pm-suspend remova o módulo antes de suspender. Essa é a solução, digamos, canônica.
MAS não funcionou direito comigo, causando muito o problema com o events/0 já citado.
O que fiz, então, foi comentar aquela diretiva e criar o arquivo
/etc/pm/sleep.d/09semp_toshiba_workarounds com o seguinte conteúdo:
#!/bin/sh
case "$1" in
hibernate|suspend)
rmmod rtl8187
sleep 5
;;
thaw|resume)
modprobe rtl8187
sleep 5
;;
*) exit $NA
;;
esac
Notem que ele apenas se diferencia da diretiva SUSPEND_MODULES pela pausa de 5 segundos. Por algum motivo isso me ajudou.
O nome do arquivo deve começar com um número menor que 10, pois ele deverá ser chamado imediatamente depois de
/usr/lib/pm-utils/sleep.d/10NetworkManager no momento da suspensão; e imediatamente antes, no momento de acordar.
2) No console do linux o LCD não acendia de novo, então (isso é mais complicado) tive que ensinar o hal a passar --quirk-vbe-post para o pm-suspend:
Criei o arquivo
/usr/share/hal/fdi/information/10freedesktop/20-video-quirk-pm-semp-toshiba.fdi com o seguinte conteúdo,
específico para meu modelo (notem que deixei comentadas várias outras opções, para facilitar outras tentativas):
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
<deviceinfo version="0.2">
<device>
<match key="/org/freedesktop/Hal/devices/computer:system.hardware.vendor" prefix="Semp Toshiba">
<match key="/org/freedesktop/Hal/devices/computer:system.hardware.product" prefix="IS-1454">
<!-- merge key="power_management.quirk.dpms_on" type="bool">true</merge-->
<!-- merge key="power_management.quirk.pci_save" type="bool">true</merge-->
<!-- merge key="power_management.quirk.s3_bios" type="bool">true</merge -->
<!-- merge key="power_management.quirk.s3_mode" type="bool">true</merge -->
<merge key="power_management.quirk.vbe_post" type="bool">true</merge>
<!-- merge key="power_management.quirk.vbestate_restore" type="bool">true</merge -->
</match>
</match>
</device>
</deviceinfo>
É isso.
Referência:
http://people.freedesktop.org/~hughsient/quirk/ (muito boa!)
Bug report:
Intrepid: cannot suspend with module rtl8187 loaded.
O próximo passo é fazer as teclas funcionarem.