Por algún extraño motivo, Gnome Shell siempre se bloquea cuando cuelgo una llamada de Skype. En muchas otras ocasiones, insiste en consumir más recursos de los que debería, llegando a veces a bloquear por entero mi ordenador.

Cómo matar el proceso bloqueado de Gnome Shell

Normalmente no queda más remedio que cambiar a otra terminal (pulsando Ctrl + Alt + F2/F3/F4...) y matar el proceso a lo bruto con este comando:

killall --signal KILL gnome-shell

Gnome Shell 3.4 se reinicia automáticamente tras hacer esto. El problema es que, dado que el ordenador ha sido bloqueado, a veces ni siquiera puedo cambiar de terminal.

Evitar que Gnome Shell llegue a bloquear por completo el ordenador

Le vamos a asignar una prioridad inferior al proceso. En GNU/Linux, cuanto menor es el nice, mayor es la prioridad del proceso, y viceversa, así que disminuiremos su prioridad aumentando su nivel de nice.

$ renice --priority 5 --pid $(pidof gnome-shell)

Ahora puede que se bloquee, pero al menos no debería inutilizar a otros procesos más importantes. Si se cuelga, ahora podrás cambiar de terminal y matar el proceso sin ningún problema. Sin embargo, en cuanto reinicies el ordenador, todo esto perderá su efecto.

Automatizar el cambio de prioridad

Crear un script que haga el trabajo sucio

Es el primer paso. Para ello, puedes usar este comando:

cat << END > ~/.local/bin/gnome-shell-renice.sh
#!/usr/bin/env bash
renice --priority ${1:-5} --pid $(pidof gnome-shell)
END
chmod u+x ~/.local/bin/gnome-shell-renice.sh

Nota: La parte de ${1:-5} usa la variable $1 y, si no se indica, usa el valor literal 5. De este modo, puedes llamar al script con un comando como el siguiente para que la prioridad se establezca en 10:

gnome-shell-renice.sh 10

Crear un fichero .desktop que se cargue al iniciar sesión

Puedes usar gnome-session-properties para eso, o crearlo por consola así:

cat << END > ~/.config/autostart/renice.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Type=Application
Exec=gnome-shell-renice.sh
Hidden=false
X-GNOME-Autostart-enabled=true
Name[es_ES]=Reducir prioridad de Gnome Shell
Name=Reduce Gnome Shell priority
Comment[es_ES]=Reduce la prioridad de la shell para evitar bloqueos
Comment=Reduce Gnome Shell priority to avoid freezes
END

Nota: No puedes escribir el script directamente en el fichero .desktop por restricciones de seguridad.