jueves, 8 de septiembre de 2011

Lanzar una aplicación al inicio en un determinado escritorio

A mucha gente, le gusta, por ejemplo lanzar determinada aplicación para que se inicie al arrancar el sistema y hacer login, hasta ahí perfecto.
Pero el problema es que la mayoría de las veces, ese programa no nos interesa que esté abierto en el escritorio principal de trabajo, si no que queremos que se lance hacia otro escritorio.....

Eso, ha fecha de hoy no he encontrado a nadie que lo haya conseguido directamente, si mediante el programa devilspie, que a mi parecer requiere bastantes conocimientos y para lo que queremos creo yo que es más sencillo esto que he inventado, algo rudimentario pero con un efecto muy chulo y elegante, a la vez que efectivo.

Esta entrada, he de admitir que me ha dado mucha guerra poder llevarla a cabo... tras decenas de pruebas y errores lo he conseguido tras una noche entera delante de la pantalla y sin dormir he creado un sript facil de usar, además, quedará un efecto muy muy elegante para lo que queremos hacer.

Bien, aquí hay una diferencia en el método.
Si usas compiz o si no lo usas, ya que el comando cambia.

Instalando aplicaciones necesarias
scorpyo@pc:~$ sudo apt-get install wmctrl

-Si usas compiz:

Debes instalar el centro de control de compiz para activar un par de efectos que son necesarios para el correcto funcionamiento.

scorpyo@pc:~$ sudo apt-get install compizconfig-settings-manager

Ahora abriremos dicha aplicación en Sistema > Preferencias > Administrador de opciones de compiz config

En el apartado "Escritorio" activamos "Cubo de escritorio" y "Girar cubo" lo configuramos si queremos para que esté a nuestro gusto, o lo dejamos como está por defecto.


Creando el script
Ahora, nos queda crear el scrip que hará todo el trabajo por nosotros que posteriormente haremos que se inicie en nuestra sesión.

Este script hace lo siguiente:

-Creará un bucle y no saldrá de este hasta conseguir su objetivo.

-Comprobará si compiz ya está activo, si no lo está, seguirá el bucle.

-En cuanto esté compiz activo, el script ejecutará los comandos necesarios para girar el cubo a la cara 2 (vosotros lo podéis cambiar) esperar un par de segundos mientras se posiciona y termina la transisión, lanza el programa que queremos y vuelve inmediatamente hacia el escritorio 1.

Ok.

Abriremos una terminal para trabajar.
Creamos una carpeta en nuestro directorio personal para guardar nuestro scrip

scorpyo@pc:~$ mkdir ~ /mis-aplicaciones

Creamos el script que girará el cubo y ejecutará el programa.

scorpyo@pc:~$ gedit ~/mis-aplicaciones/script-windows (vosotros poned el nombre que queráis, yo lanzaré una máquina de virtualbox con windows)

Ahora copiamos todo esto:

 -----------------Copia el texto------------------

#!/bin/bash

#    Este es un script que girará su escritorio y lanzará una o varias aplicaciones.
#    Copyright (C) <2011> <Miguel Ponce Torres>
#
#    Este programa es software libre: usted puede redistribuirlo y / o modificar
#    bajo los términos de la GNU General Public License publicada por
#    la Free Software Foundation, bien de la versión 3 de la Licencia, o
#    (A su elección) cualquier versión posterior.
#
#    Este programa se distribuye con la esperanza de que sea útil,
#    pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de
#    COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la
#    Licencia Pública General GNU para más detalles.
#
#    Debería haber recibido una copia de la Licencia Pública General GNU
#    junto con este programa. Si no, vea <http://www.gnu.org/licenses/>.
#
#    Si quiere contactar con <Miguel Ponce Torres> puede hacerlo en: miguelponcetorres@gmail.com
#
# Este script usa el comando wmctrl con las variantes siguientes:
# wmctr -o <valor>      Para compiz
# wmctrl -s <valor>     Para metacity
#
#
# Bucle a la espera de corroborar que copiz está en ejecución.
NOZOMBY=0
while n=0
do

    #Se comprueba si el gestor de ventanas está corriendo
    ps -A | grep compiz
 
    #Si está corriendo el valor de $? es 0
    if [ $? = "0" ]
    then

        # Espera un segundo y gira el cubo
        #hacia la derecha una vez
        sleep 1
        wmctrl -o 1366,0

        # Le damos 2 segundos antes de seguir para que se
        # posisione el cubo
        sleep 2

        # Comando o comandos separados por ; que ejegutará el script
        vboxmanage startvm Windows
  
        # Volvemos al escritorio 1
        wmctrl -o 0,0
        break
    else

        sleep 1
        let NOZOMBY=NOZOMBY+1
        echo "Aún no está listo el gestor de ventanas.... $NOZOMBY intentos"
        if [ $NOZOMBY = "10" ]
        then
            exit

        fi
    fi

done

---------------------Fin-------------------
Lo que está en verde, es el gestor de ventanas que estés usando, en mi caso uso compiz así que es el que espera a que se ejecute, si no lo hace en cierto tiempo, el escrit se terminaría para no quedar zombi.

Lo que está en rojo es el comando o lista de comandos separados por retornos de carro o ";" que se ejecutan con el script.

Lo que está en morado es el ancho de la resolución de vuestro escritorio si usas compiz, si usas metacity es el número de escritorio si no estáis seguros de la posisión en la que está el escritorio al que queréis mandar la aplicación, os movéis a dicho escritorio, y abrid una terminal para poner:

scorpyo@pc:~$ wmctrl -d
0  * DG: 5464x768  VP: 1366,0  WA: 0,0 1366x731  Área de trabajo 1

El valor VP es el que te interesa en mi caso es:
0,0 en el escritorio 0
1366,0 en el escritorio 1
2732,0 en el escritorio 2
4098,0 en el escritorio 3

Nota, fijaros que el valor de la resolución simplemente se va sumando...
Siempre con el decimal.

Nota: El área de trabajo no cambia, ya que compiz trabaja de otra forma pero no importa.

Para hacer una prueba en directo ahora mismo si tienes compiz, en la terminal pon:

scorpyo@pc:~$ wmctrl -o resolución-escritorio-2;sleep 2;wmctrl -o 0,0

Eso hará que el escritorio gire al lado que hayas puesto y tras dos segundos volverá al escritorio 1

Bien, si tuviésemos metacity en lugar de compiz, el valor morado es simplemente el número del escritorio al que queremos movernos pero el comando cambia:

scorpyo@pc:~$ wmctrl -s 1
o
scorpyo@pc:~$ wmctrl -s 2
o

scorpyo@pc:~$ wmctrl -s 3

Etc....


Para hacer una prueba en directo ahora mismo si tienes metacity, en la terminal pon:

scorpyo@pc:~$ wmctrl -s número-de-escritorio;sleep 2;wmctrl -s 0

El número de escritorios empieza por 0
0 ----> Escritorio1
1 ----> Escritorio2
2 ----> Escritorio3
3 ----> Escritorio4


Cuando tengamos el script terminado, lo gardamos y cerramos gedit.
Ahora le damos permisos de ejecución así:


scorpyo@pc:~$ chmod +x ~/mis-aplicaciones/script-windows (cambia script-windows por el nombre de tu script)
 
Conseguir que se inicie en tu sesión
En la terminal nos moveremos a la carpeta /home/tu-usuario/.config/autostart y crearemos un lanzador para nuestra aplicación

scorpyo@pc:~$ gedit ~/.config/autostart/script-windows.desktop 

Pegamos lo siguiente:

[Desktop Entry]
Type=Application
Name=Nombre de la aplicaicón
Comment=Arranca máquina virtual y la manda al escritorio 2 (descriptción)
Icon=
Exec=/home/scorpyo/mis-aplicaciones/script-windows



Tu solo haz de cambiar lo que está en gris claro para que cuadre con tus datos y con tu script.

Guardamos y reiniciamos para ver como funciona.

Así queda mi ejemplo


Espero que os haya servido.


No hay comentarios:

Publicar un comentario