Cómo mantener las extensiones tras un reinicio (Ubuntu 14.04 y Gnome Shell)

Holas a todos y todas. No es novedad que Gnome-Shell y Ubuntu-Unity no se llevan del todo bien. Decirlo así puede sonar fuerte, pero es la verdad. Incluso luego de la salida Ubuntu-Gnome aún pueden encontrarse un sin fin de bugs, algunos graves, otros tontos, pero la tónica es que la mayoría permanecen sin solucionar desde el lanzamiento alpha. Y lo cierto es que los muchachos de Ubuntu Gnome son bastante herméticos en dejar entrar gente a participar de la distro (una lástima).

Anyway, dejando mis inconformidades de lado, hoy me voy a meter con uno de los bugs más molestos de Ubuntu-Gnome (que existe desde la versión alpha y perdura hasta la versión final LTS -wtf-). El problema: tras un reinicio se desactivan todas las extensiones.

A buscarse el café o la birrita porque me emocioné y escribí un montón. :P
… ah! A lo último hice un resumen para los que tengan fiaca. :)

El bug

Antes que nada, parece que esto sólo sucede en Ubuntu-Gnome. Resulta que uno entra contento a ver cómo anda la shell en su última versión en un entorno de la familia debian, como lo es ubuntu gnome. Una de las primeras cosas que se hacen luego del primer boot es chusmear las nuevas extensiones en el sitio oficial e instalar las viejas, clásicas que nos gustan y siempre ponemos. Abrimos Gnome Tweak Tool y empezamos a configurar todo para dejar nuestro escritorio en sintonía con lo que nos imaginamos debería ser el “entorno definitivo” para trabajar (o lo que cada uno haga con su computadora :P ).

Luego de pasar 2 o 3 horitas toqueteando, probando, instalando, sacando, poniendo, hacemos un lindo dist-upgrade y reiniciamos, como corresponde. Amargo momento es el que nos espera cuando vemos que tras el reinicio todas las extensiones que teníamos configuradas ya no están más. Todo rústico, todo feo como si fuera el primer boot.

Gnome Tweak Tool con las cosas activadas

¿Qué pasó? Bueno aparentemente Ubuntu-Gnome no reconoce el reboot como una forma de apagado seguro y tras reiniciarse entra en una especia de “modo a prueba de fallos” en el que desactiva todas las extensiones. Esto es porque si estamos usando extensiones experimentales (o estamos jugando a desarrollar una), la shell se puede crashear y este mecanismo nos permite reinciar todo y solucionar el problema.

Gnome Tweak Tool luego del reinicio: trisísimo.

Pero en realidad ni estabamos probando extensiones experimentales ni desarrollando una, sino que todo funcionaba perfecto. Incluso el bug sucede si no instalamos nuevas extensiones desde el sitio, sino sólo activando las oficiales que vienen en los repos. Y ya, tras un reinicio, PAM!, a configurar todo de nuevo. Todo lo que activaste está olvidado en el recuerdo. A la segunda vez que te pasa querés instalar un KDE corriendo, con una sensación de frustración súper justificada.

Estas son las cosas que hacen que la gente piense que gnome-shell es una mierda. Y tienen razón, porque claramente es un aspecto crítico del sistema que definitamente destruye la experiencia de usuario en un boot… :/

La solución

Bueno, como siempre, buscando y buscando todo se puede solucionar. Dadas mis limitaciones técnicas (eso de que no soy programador y bla bla) el work-around que encontré es bastante simple. Se trata de “atar con alambre” lo que no anda forzando el inicio de las extensiones mediante la ejecución de gsettings al inicio de la sesión.

El trabajo consiste en tres partes: primero tenemos que saber mediante línea de comando qué extensiones tenemos instaladas. Segundo tenemos que crear UNA línea de gsettings que nos active todas extensiones a la vez. Tercero, tenemos que agregar eso a las aplicaciones que se activas al iniciar sesión.

Paso 1: listando las extensiones

Entonces parece que queremos listar las extensiones que tenemos activadas. Es muy fácil, se hace con un comando en la terminal que devuelve los valores activos de gsettings. Sólo asegúrense de que antes de correr el comando hayan activado todo lo que quieren activar desde Gnome Tweak Tool.

Abran una terminal y peguen:

gsettings get org.gnome.shell enabled-extensions

devuelve algo así:

Esa lista es la que queremos copiar y pegar para el paso siguiente. Así, lo que guardamos en un gedit es:

['alternate-tab@gnome-shell-extensions.gcampax.github.com', 'hide-dash@xenatt.github.com', 'hide-workspace@xenatt.github.com', 'panel-osd@berend.de.schouwer.gmail.com', 'user-theme@gnome-shell-extensions.gcampax.github.com', 'apps-menu@gnome-shell-extensions.gcampax.github.com', 'remove-dropdown-arrows@mpdeimos.com', 'SkypeNotification@chrisss404.gmail.com']


(para curiosos y detallistas) Listando todo todo lo que haya:

Las extensiones activas provienen de dos fuentes: las que vienen por defecto en gnome-shell y las que nosotros instalamos manualmente. Para saber qué extensiones tenemos instaladas (en lugar de “activas”, que es lo de arriba) podemos correr un comandito que va a listar todas. Hay un modo bastante simple de listar todas las extensiones disponibles desde la terminal usando “ls”.

Para listar SÓLO las extensiones que nosotros instalamos manualmente, simplemente tenemos que ejecutar esta línea:

ls ~/.local/share/gnome-shell/extensions

El output será algo así:

Sólo para que quede claro, todas las extensiones están en una carpeta y cada extensión es un directorio, por lo que las podemos listar de la forma que querramos. También podemos ver qué extensiones instalamos desde nautilus, navegando a .local > share > gnome-shell > extensions, como se ve en la captura. Por supuesto, usar la terminal hace el trabajo más fácil para el objetivo que tenemos. Un dato más: acá también van a estar todas las extensiones que alguna vez probamos, si saben que no las van a usar nunca más, entonces no pierdan oportunidad y bórrenlas al carajo jeje.

Para listar todas las extensiones (incluso las que ya vienen incorporadas a gnome shell por defecto), podemos correr este comando:

ls ~/.local/share/gnome-shell/extensions && ls /usr/share/gnome-shell/extensions/

Recuerden que no todas las extensiones instaladas tienen que estar activadas! En mi caso, sólo a modo de ejemplo, “Launch and Exposè” (Launch-And-Expose@xenatt.github.com) está instalada pero no activada. Lo mismo con otras extensiones de sistema, como por ejemplo “Auto move windows” (auto-move-windows@gnome-shell-extensions.gcampax.github.com) que todavía no entiendo bien qué hace :P.

Ok, entonces lo primero es hacer la lista de qué queremos y qué no. La forma general es como dije arriba. Listamos y nos anotamos cuáles queremos y cuales no en un gedit o donde quieran. Si quieren hacer una lista de todo y luego seleccionar, pueden ir con este último comando que les pasé.

Paso 2: forzar la activación de extensiones

Como se imaginarán, una vez que tenemos la lista de las extensiones que nos interesan, la cuestión es simplemente correr un comando que active “esa” lista.

En una terminal pegamos:

gsettings set org.gnome.shell enabled-extensions "['alternate-tab@gnome-shell-extensions.gcampax.github.com', 'hide-dash@xenatt.github.com', 'hide-workspace@xenatt.github.com', 'panel-osd@berend.de.schouwer.gmail.com', 'user-theme@gnome-shell-extensions.gcampax.github.com', 'apps-menu@gnome-shell-extensions.gcampax.github.com', 'remove-dropdown-arrows@mpdeimos.com', 'SkypeNotification@chrisss404.gmail.com']"

Si se fijan con cuidado simplemente estamos haciendo esto:

gsettings set org.gnome.shell enabled-extensions " XXXX "

Reesmplazando XXXX por la lista de extensiones que obtuvimos en el primer paso. :)

La terminal siempre manda, así que con este comando “pisamos” toda la configuración de Gnome Tweak Tool. Si la extensión no está en la lista, estará apagada.

Cada vez que tengamos un problema, simplemente podemos correr este comando y ya. Todas las extensiones que hayamos listado se activan. Obviamente asegúrense de que las extensiones que corren funcionan correctamente y que no hacen “crashear” la shell… sino, buah, básicamente estarán haciendo cagada :)

Así que, para hacerla corta, en la lista sólo tenemos que poner extensiones que hayamos probado mucho y que funcionen bien. Mientras tanto, si no confiamos ciegamente en todas las extensiones que usamos, conviene tener un listadito con aquellas que son indispensables y que necesitamos para ser súper felices (léase user themes y alternate-tab jeje) y luego con cautela ir agregando otras, con cautela, repito.

Y repito de nuevo. Las extensiones que funcionan mal crashean la shell. Si las agregan y fuerzan su activación están atentando contra la estabilidad del entorno. Ojo.

Paso 3: Ejecución al inicio de sesión

El tercer paso consiste en autoejecutar al inicio de la sesión el resultado del paso 2, nuestro comando que fuerza la activación de las extensiones. Para eso tenemos que agregar un “launcher” al menú de autostart de gnome. Es muy sencillo.

Abran un gedit o editor de texto favorito y peguen:

[Desktop Entry]
Type=Application

Exec=gsettings set org.gnome.shell enabled-extensions " XXXXXX "

Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=false
Name[es_ES]=extensions.desktop
Name=shell extensions
Comment[es_ES]=
Comment=

Se va a ver algo así. Recuerden que tienen que reemplazar ” XXXXXX “ por sus extensiones y que las comillas son importantísimas.

Guardamos el archivo en el destino ~/.config/autostart (el rulito ~ significa su carpeta de usuario). Tienen que activar ver los archivos ocultos para acceder a “.config”. El nombre que le vamos a poner es shell-extensions.temp. Si, .temp. Ahí vamos.

Por último creamos el .desktop le damos permisos de ejecución al nuevo launcher. Abrimos una terminal y pegamos:

mv ~/.config/autostart/shell-extensions.temp ~/.config/autostart/shell-extensions.desktop && chmod +x ~/.config/autostart/shell-extensions.desktop

Listo. Terminamos. Para checkear podemos jugar un poco y desactivar todas las extensiones antes de reinicar. Reiniciamos y “vualá”, tutto aposto. Las extensiones que seleccionamos tendrían que estar activadas.

 


 

 

Resumen sin palabrerío:

El post en 3 pasos
1) Listamos las extensiones activas. Terminal: gsettings get org.gnome.shell enabled-extensions. Copiamos el output.
2) Probamos la activación forzosa. gsettings set org.gnome.shell enabled-extensions " XXXXXX ". Donde XXXX es el output del paso 1.
3) Hacemos un .desktop con el comando del paso 2 y lo metemos en la carpeta de aplicaciones al inicio.

Eso es todo por hoy amigos y amigas. Espero les sirva y, como siempre, preguntas, comentarios y experiencias serán más que bienvenidos.

Ps. algún día tengo que hacer el post con mis extensiones preferidas. O más bien sobre extensiones en gnome-shell. Pero como verán, me da un poco de miedo porque cada vez que empiezo termino haciendo estos posts que son bastante largos. Todo muy lindo, pero mi jefe me va a cortar las bolas si no me pongo las pilas, jajaj. Me voy a trabajar. :)

Salú!

 

Aside

40 thoughts on “Cómo mantener las extensiones tras un reinicio (Ubuntu 14.04 y Gnome Shell)

  1. a mi eso no me pasa. lo que SI me pasa es que al reiniciar se me desconfiguran los monitores ( la posicion), yo tengo el monitor externo a la izquierda de la laptop, y se me vuelve a la derecha.
    En el GDM no me molesta, pero en el escritorio si.
    probe crear un .sh que copie de una carpeta mia el archivo monitors.xml a .config/monitors.xml y que se ejecute con los programas que estan al inicio gnome-session-properties sino me equivoc,pero no funciona.

  2. Una pregunta offtopic, compañero.

    ¿Como hago para que Plank me inicie con el sistema en mi Antergos Gnome Shell 3.12 1?

    No me deja añadirlo en Aplicaciones al icicio desde Gnome Tweak Tool

    Ya sabes que soy novato en esto de GS, no se crear la entrada a mano :-/

    1. Hola Yoyo, seguro man. Es súper fácil, pero hay que hacerlo manualmente. Basta con copiar los .desktop en la carpeta ~/.config/autostart

      Y después copia los lanzadores desde /usr/share/applications. Por último, hay que darle permisos de ejecución al desktop para que inicie bien. En tu caso, para plank, todo el proceso en una línea sería:

      mkdir -p ~/.config/autostart && cp -a /usr/share/applications/plank.desktop ~/.config/autostart && chmod +x ~/.config/autostart/plank.desktop

      Salú! :)

  3. Estimado, otra forma de solucionar eso, que a mi me funcionó fue reiniciar el sistema con las extensiones activadas, y en el GDM al iniciar sesión, selecciono “Systen Default” como entorno de escritorio. De esa forma las extensiones se mantuvieron activadas al momento de iniciar Gnome… Espero sirva mi comentario.

    Saludos…

      1. Jajaja. Lo que hice fue activar las extensiones. Luego reinicias, y al momento de loguearte en el GDM eliges “System Default” como escritorio. Con eso las extensiones deberían aparecer cargadas.

        Saludos… :D

      2. Jajaja! es verdad! un genio. jajajaja.

        Bueno, que lean loco. Si llegan hasta los comentarios sepan que el post se reemplaza por un par de clicks. jajaj.

        El camino del nerd es así. ^_^

  4. Anacronico says:

    Quizá no eres programador pero entiendes de maravilla el asunto. Por ejemplo, elementary OS es maravilloso pero eso de no tener una tecla para mostrar las aplicaciones es tambien algo tonto. Hay que teclear inicio + espacio El asunto se resuelve configurando esquinas activas y eso hace de eOS increible. Todo con movimiento del ratón pero en el fondo, muchos prefieren (claro) el teclado exclusivamente.

    No soy y nunca seré un programador pero entre quienes lo son, algunos han dicho y con bastante razón que escribir código es muy parecido a la Poesía. Creación pura.
    A mi solo me gusta el diseño,
    El Punk – Metal – Dark – Electro
    y escribir cuentos sobre fantasmas cotidianos, olvido (No terror) y alucines bajo la soledad del ruido!

    Saludos desde México!!

  5. Anacronico says:

    Orale!! tres semanas son muy buenas. Eres de Argentina entiendo. He escuchado algunas cosas sobre El Barrio de San Telmo (que vendria siendo Coyoacan acá)

    Buscare unas historias cortas, creo que las hago demasiado cortas, como una estampida.
    tan efimeras como lo es todo.

    1. Hola Ernesto, es el tema en el que estoy trabajando jeje por ahora sólo la NSA lo conoce (cuac!), no no , ya casi lo tengo. Prometo que apenas avance un poco con la parte gtk2 lo publico. :)

      Nombre?… creo que será “Sudestada”: basta de nombres en inglés. ;)

      1. ¿Sudestada? Hummm…puedes hacer una versión verdosa y llamarla PAMPA, de paso haces que la gente que utiliza Open SUSE se ponga verde de la envidia jejejeje

  6. Buenas tengo un gran problema!!

    Instalé Ubuntu 14.04, después de eso procedí a instalar el Gnome Shell, pero me lanza el siguiente mensaje:

    Los siguientes paquetes tienen dependencias incumplidas:
    gnome-shell : Depende: gnome-settings-daemon (>= 3.4.0) pero no va a instalarse
    Recomienda: gnome-control-center pero no va a instalarse
    ubuntu-gnome-desktop : Depende: gdm pero no va a instalarse
    Depende: gnome-control-center pero no va a instalarse
    Depende: gnome-session pero no va a instalarse
    Depende: gnome-settings-daemon pero no va a instalarse
    Depende: gnome-shell-extensions pero no va a instalarse
    E: No se pudieron corregir los problemas, usted ha retenido paquetes rotos.

    ¿Qué puedo hacer para poder instalarlo y arreglar este problema?

    Muchas gracias!!

    1. Hola Marco, el problema es que Unity y Gnome-shell no son compatibles. Las razones son varias, pero las principales son una serie de librerías claves y paquetes que excluyen otros paquetes de uno y otro lado. Básicamente son los mensajes que tenés.

      La alternativa hippie es hacer un purge de unity y de ubuntu-desktop y luego instalar manualmente **con ppa incluido** el entorno gnome. Los problemas que podés encontrar en el camino usando este método son literalmente infinitos.

      Por otro lado, lo que te recomendaría es que instales ubuntu-gnome que ya está integrada y sin problemas. Luego le podés agregar el ppa staging para tener gnome 3.12.

      El flavor ubuntu-gnome es diferente a los otros en el sentido de que prácticamente excluye la posibilidad de usar Unity (con una buena experiencia), cuando todos los otros flavors (lxde, xfce, incluso kde) conviven en paralelo con Unity sin dar mayores problemas. La razón? Unity está basado en Gnome. Gnome pisa configuraciones y paquetes de Unity. A la mierda todo. jeje.

      Espero haberte aclarado un poco el panorama, aunque puede ser que te haya desilusionado un poco con la respuesta, el camino seguro es instalarte Ubuntu-gnome y sacar Unity. :)

  7. clp says:

    Increible la solución… otro problema muy recurrente, no se si sólo me pasa a mí es el cambio de teclado de español a inglés. La solución es mantener el teclado inglés y luego con alt+space cambiar entre teclado inglés y vuelta al español y vuelve a ponerse de forma correcta el español, no he encontrado ninguna solución alternativa :(

    Salu2 de clp

  8. En primer lugar te debo felicitar y dar las gracias por este tutorial y tantos otros que publicas en tu blog.

    He hecho lo que decías anteriormente y me funcionó a medias. Realmente, para que me funcionase totalmente necesitaba reiniciar el shell (gnome-shell -r), por lo que me hice un binario llamado extensions.desktop que añadí a las aplicaciones al inicio. Dicho binario (incluido en /usr/bin/) contenía lo que tú recomiendas arriba, además del comando gnome-shell -r. Así sí me ha funcionado perfectamente.

    Gracias por tu ayuda.

    Manuel.

  9. Muchas gracias por el post, me ha ayudado (y los comentarios tb :D).
    Aunque añadiria al inicio del los tres pasos con palabrerío un enlace a la seccion “Resumen sin palabrerío” :-P
    s2!

  10. pablo says:

    Ayuda huce todo lo que dice en el post y no pasa nada todo sigue igual las extensiones no aparecen

    Tengo Ubuntu gnome 14.04 con -GS 3.12.2

    La verdad nunca me gusto GNOME mas que en Fedora Ahi es perfecto todo pero quiero una distribución LTS con gnome alguna sugerencia?

      1. pablo says:

        Muchas gracias Rhoconlinux buen post luego de realizar el procedimiento 2 veces funciona, lástima que Ubuntu Gnome sea tan inestable, pero Fedora 21 allá voy.

  11. Aarón Morales says:

    No me aparece la carpeta autostart en .config? tengo instalado Ubuntu Gnome 14.04.1 LTS 64-bit e instale Gnome 3.12.2 desde la ppa gnome-staging

  12. Hola tu post está genial ¿todo esto funciona en GNOME 3.12? porque estoy usando Ubuntu-GNOME 14.10 con GNOME 3.14 y las entensiones se me siguen ocultanto al iniciar el sistema y debo activarlas de manera manual. una ayuda ¿como lo soluciono? intenando hacer todo de nuevo me dice que el shell-extensions.temp no lo consigue cuando si está en la carpeta .config/autostar. un saludo.

    1. Gracias Avelino! Probaste saliendo de la sesion e iniciando con la sesion “default” en lugar de la “gnome” (que es la que ironicamente viene por defecto)?
      Todavía no tuve tiempo de instalar gnome 3.14 ni ubuntu 14.10, pero en cuanto lo pruebo. El post debería funcionar porque ni gnome ni ubuntu cambiaron mucho, asi que todo debería andar.
      Comentanos como fue! :D

  13. Hola Gracias por la información. Una pequeña observacion en la linea del lanzador de inicio pusiste:

    X-GNOME-Autostart-enabled=false

    Lo correcto es:

    X-GNOME-Autostart-enabled=true

    Por lo demas esta muy bién felicidades y exitos futuros

    Atte: Max Ramales Esparza
    México

Y tu? qué estás mirando? :)

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s