En muchas distribuciones GNU/Linux las funciones de Hibernar y Suspender no funcionan correctamente, debido a razones que desconozco y que luego investigaré, la mayoría de ellas no "despierta" luego de estar en uno de estos dos estados. Al menos en mi caso, el teclado de mi computadora tiene un botón con una media luna que pone el sistema en hibernación y que mi bebé de dos años presiona con cierta regularidad, por accidente o curiosidad.
A fin de cuentas debido a que el sistema no volvía en sí, sino que había que apagarlo a la fuerza (cortando la corriente) investigué cómo deshabilitar estas funciones a nivel de sistema operativo.
Lo primero que debemos hacer es averiguar con PolicyKit el nombre de las acciones que controlar estas dos funciones. PolicyKit es una herramienta a nivel de aplicación para definir y manejar políticas que permitan a procesos sin privilegios hablar o conectar con procesos privilegiados. Esta herramienta es específica para usarse en entornos multiusuarios de sistemas tipo Unix. Como trabaja a nivel de aplicación no tiene nada que ver o se relaciona con características del kernel.
Esto lo haremos con el comando pkaction:
En Action obviamente van las acciones que encontramos con el comando pkaction, y las demás variables con valor no para que las acciones en cuestión queden deshabilitadas. En distribuciones derivadas de Debian como Ubuntu y Linux Mint las acciones pueden llamarse diferente:
Más recursos:
[root@rainbow ~]# pkaction | grep power org.freedesktop.devicekit.power.hibernate org.freedesktop.devicekit.power.qos.cancel-request org.freedesktop.devicekit.power.qos.request-latency org.freedesktop.devicekit.power.qos.request-latency-persistent org.freedesktop.devicekit.power.qos.set-minimum-latency org.freedesktop.devicekit.power.suspendComo podemos observar hay dos acciones que controlan las fuciones que nos interesan y son: org.freedesktop.devicekit.power.hibernate y org.freedesktop.devicekit.power.suspend, por lo que las usaremos en un fichero que crearemos en PolicyKit:
[root@rainbow ~]# nano /etc/polkit-1/localauthority/50-local.d/50-disable-suspend.pkla [Disable Suspend] Identity=unix-user:* Action=org.freedesktop.devicekit.power.hibernate;org.freedesktop.devicekit.power.suspend ResultAny=no ResultInactive=no ResultActive=noViendo pues un poco en detalle el fichero anterior, en el valor Identity vamos a pasarle unix-user:*, ya que la intención es deshabilitarlo para todos los usuarios. Es posible también indicar grupos de usuarios con unix-group:nombre_grupo, o en el caso de los usuarios especificar los usuarios separados por punto y coma: unix-user:fraterneo;root.
En Action obviamente van las acciones que encontramos con el comando pkaction, y las demás variables con valor no para que las acciones en cuestión queden deshabilitadas. En distribuciones derivadas de Debian como Ubuntu y Linux Mint las acciones pueden llamarse diferente:
fraterneo@rainbow2 ~ $ pkaction | grep power org.freedesktop.upower.hibernate org.freedesktop.upower.qos.cancel-request org.freedesktop.upower.qos.request-latency org.freedesktop.upower.qos.request-latency-persistent org.freedesktop.upower.qos.set-minimum-latency org.freedesktop.upower.suspend org.gnome.settings-daemon.plugins.power.backlight-helper org.mate.power.backlight-helperPero al crear el fichero el formato es el mismo. Es posible también lograr el mismo resultado mediante gconf-editor, es más fácil pero esto nos enseña el uso de PolicyKit cuyo campo de acción es más amplio y porfesional.
Más recursos:
man polkit
man pklocalauthority
man pklocalauthority
linuxero
ResponderEliminarhola soy nuevo quiero hacer un repositorio local de centos como ago me pueden ayudar
EliminarHola Claudio, gracias por este artículo, es bastante útil.
ResponderEliminarEn mi caso, estoy usando Ubuntu Server, en un "ordeñador" portátil, no me aparecen todas las opciones que muestras en tu caso.
Solo tengo lo siguiente:
org.freedesktop.login1.inhibit-handle-power-key
org.freedesktop.login1.power-off
org.freedesktop.login1.power-off-ignore-inhibit
org.freedesktop.login1.power-off-multiple-sessions
Me gustaría aprender como configurar el servidor para que no hiberne o suspenda cuando le cierre la pantalla y por supuesto, que no apague le disco duro, pero que si apague la pantalla, ya que no es útil en mi caso, por que suelo acceder por acceso remoto ssh.
Creo entender que las lineas del archivo en mi caso son para desactivar el botón ce encendido & apagado, pero como no veo nada de hibernación y suspensión, entonces no se como proceder para desactivar estas acciones pre-configuradas del servidor.
¿Algún consejo/sugerencia?
Saludos
Hola. Gracias por su comentario.
EliminarEn vez de usar power como filtro en grep, use hiberbate y suspend, y así podrá verlos
# pkaction | grep suspend
# pkaction | grep hibernate
Saludos.
Estupendo!
ResponderEliminarTengo que cambiar la forma de pensar tipo M$ que tengo todavía.
No se me había ocurrido y eso que es bastante lógico.
Muchísimas gracias Claudio.
Bueno, mis disculpas por varios comentarios seguidos, pero he encontrado algo que a algún neófito en Linux como yo le podría ayudar con el tema tratado en el articulo de Claudio.
ResponderEliminarEl objetivo en cuestión es logind.conf y está en /etc/systemd/ (Debian/Ubuntu) posiblemente, en otras distros sea la misma localización o no, no lo sé.
sudo nano /etc/systemd/logind.conf
En este archivo aparecen unas opciones mas que interesantes, no estoy seguro al 100% pero creo que se puede aplicar la configuración adecuada para cualquier caso editando este archivo.
A mi me aparece lo siguiente:
[Login]
#NAutoVTs=6
#ReserveVT=6
#KillUserProcesses=no
#KillOnlyUsers=
#KillExcludeUsers=root
#InhibitDelayMaxSec=5
#HandlePowerKey=poweroff
#HandleSuspendKey=suspend
#HandleHibernateKey=hibernate
#HandleLidSwitch=suspend
#HandleLidSwitchDocked=ignore
#PowerKeyIgnoreInhibited=no
#SuspendKeyIgnoreInhibited=no
#HibernateKeyIgnoreInhibited=no
#LidSwitchIgnoreInhibited=yes
#HoldoffTimeoutSec=30s
#IdleAction=ignore
#IdleActionSec=30min
#RuntimeDirectorySize=10%
#RemoveIPC=yes
Descomentando las linea que queramos usar y cambiándole el atributo adecuado que nos interese se consigue la configuración deseada.
En mi caso y a modo de ejemplo, para deshabilitar el interruptor usado en el cierre de la pantalla de un portátil que provoca la suspensión del sistema y o la hibernación del servidor, incluso provocaba el cierre de la sesión ssh de acceso remoto.
HandleSuspendKey=ignore
HandleHibernateKey=ignore
HandleLidSwitch=ignore
Guardamos los cambios, reiniciamos el sistema operativo y comprobamos el resultado.
Y eso es todo, solo modifiqué esas tres propiedades del sistema y ahora ya no se suspende el sistema al cerrar la pantalla del PC portátil, pero la pantalla si se apaga al cerrarla.
En mi caso, este tema quedo solucionado, una vez mas, muchas gracias por tu ayuda Claudo!
Saludos.
Gracias por el aporte.
EliminarEso es así debido a que su distro usa Systemd, como ya lo hace la mayoría de las principales.
hola escribí el comando sleep así sin ponerle tiempo y ahora no me deja entrar que puedo hacer.
ResponderEliminarhola escribí el comando sleep así sin ponerle tiempo y ahora no me deja entrar que puedo hacer.
ResponderEliminar