¿Cómo iniciar una aplicación en un espacio de trabajo diferente?

13

Necesito iniciar una aplicación GUI [Lotus Symphony] en un espacio de trabajo diferente al que se usa actualmente. [Ej .: hay 4 espacios de trabajo en un escritorio GNOME.]

P: ¿Cómo hago esto?

ps: es necesario porque el primer inicio de Lotus Symphony después de un reinicio es muy, muy lento, pero después de haberlo usado una vez, comienza muy rápidamente. Creo que se almacena en caché. Es por eso que quiero iniciarlo en cada arranque en un espacio de trabajo diferente, por lo que será rápido más tarde si necesito usarlo.

LanceBaynes
fuente
Supongo que podría ser útil saber qué sistema operativo y qué versión de GNOME está utilizando.
enzotib
ubuntu 10.04 - gnome-desktop-data 1: 2.30.2-0ubuntu1
LanceBaynes

Respuestas:

8

Echa un vistazo a Devil's Pie (aunque no estoy seguro de que funcione con Gnome3), y puedes encontrar más información útil sobre stackoverflow bash .

Básicamente debes hacer lo siguiente:

#!/bin/bash
wmctrl -n 8

firefox &
thunderbird &
/usr/bin/netbeans --locale en &
amsn &
gnome-terminal &
sleep 15

wmctrl -r firefox -t 0
wmctrl -r netbeans -t 1 
wmctrl -r terminal -t 2 
wmctrl -r amsn -t 6 
wmctrl -r thunderbird -t 7

#focus on terminal
wmctrl -a terminal 

(Acabo de copiar y pasar el código anterior desde el enlace de StackOverFlow anterior, ya que creo que se explica por sí mismo).

ACTUALIZAR:

Consulte aquí para obtener una solución más fácil en el mejor sitio para las extensiones de Gnome 3, debe instalar la extensión Auto Move de Windows para Gnome 3. En caso de que no funcione para usted (como puede ver en el enlace, hay algunas distribuciones que la automatización de la instalación no funciona correctamente, obtenga explotaciones más detalladas aquí sobre cómo hacer que funcione.

Hanan N.
fuente
2

La publicación original se refería al uso de un script para hacer que una aplicación aparezca en un espacio de trabajo en particular, de modo que se pueda usar otro script en el script de inicio para permitir que un usuario continúe trabajando mientras una aplicación de inicio muy lenta se carga en otro espacio de trabajo. Mi script funciona muy bien como front-end para la sintaxis wmctrl bastante engorrosa, para iniciar cualquier aplicación en cualquier espacio de trabajo, desde cualquier símbolo del sistema. Por lo tanto, un script adicional que simplemente enumera algo como lh 1 thunderbird; lh 2 firefox; lh 3 calculator... o lo que sea, ahora es fácil. Sin embargo, hay algunas dificultades con el tiempo, por lo tanto, el sueño en mi guión. La siguiente es la versión actualizada, que no mantendré ni publicaré nuevamente. Use TAL CUAL, sin garantía de adecuación para un uso particular. Modifica como quieras. Sugiero guardar como /usr/local/bin/lh, simplemente porquelh no es ningún otro nombre de programa conocido, al menos no en Mint 18. En cuanto a las variables, cité las variables que consideré necesarias.

#!/bin/sh
## Author: B.A. Computer Services www.ba-computer.com
## Purpose: Frontend to launch anything on a specific desktop/workspace.
##  lh is short for LaunchHere

USAGE="USAGE: $(basename $0) [-r] workspace(1,2,..) command\
    LaunchHere launches COMMAND on specific workspace.\
    -r option returns to current workspace"
[ -z "$1" ] && echo $USAGE && exit 0
ISRETURN=$(false); [ "$1" = "-r" ] && ISRETURN=true && shift;  
WRKSPC=$1;[ -z "$WRKSPC" ] && echo $USAGE && exit 0
WSN=$(expr $WRKSPC - 1)  ## wmctrl starts with 0 as first wrkspc
shift; CMD="$*"; [ -z "$CMD" ] && echo $USAGE && exit 0

WM=$(which wmctrl);[ -z "$WM" ] && echo MISSING wmctrl && exit 1
CURRENT=$(wmctrl -d | grep '*' | cut -c1)


# Switch to desired workspace
$WM -s $WSN
$CMD &
PID=$!
echo Executed $CMD on workspace $WRKSPC,  PID=$PID
sleep 3

# Return to CURRENT workspace ?
# [ $ISRETURN ] && echo TRUE || echo FALSE
[ $ISRETURN ] && $WM -s $CURRENT
BACS
fuente
Esto es genial Funciona de maravilla. ¡Muchas gracias!
Mic
0

Beta, pero me funciona en Linux mint.

#!/bin/sh
## Author: B.A. Computer Services www.ba-computer.com
## Purpose: Frontend to launch anything on a specific desktop/workspace.
##  lh is short for LaunchHere

USAGE="USAGE: $(basename $0) workspace(0,1,2,..) command"
WRKSPC=$1;[ -z "$WRKSPC" ] && echo $USAGE && exit 0
shift; CMD="$*"; [ -z "$CMD" ] && echo $USAGE && exit 0

WM=$(which wmctrl);[ -z "$WM" ] && echo MISSING wmctrl && exit 1

echo Executing $CMD on workspace $WRKSPC
$WM -s $WRKSPC
eval $CMD &
sleep 1
$WM -r :ACTIVE: -t $WRKSPC
usuario278634
fuente
El evalposiblemente debería ocurrir en "$@", o el comando, si alguno de su argumento contiene espacios o caracteres de nombre de archivo de englobamiento, no funcionará. En general, este script necesita citar expansiones variables.
Kusalananda
0

Me inspira la publicación de @ user278634 en este hilo, gracias.

Lo que modifiqué es:

  1. cambie 'eval $ CMD &' por 'eval "$ CMD &"' debido a que obtiene el comando pid $ !.
  2. mantener el espacio de trabajo actual en lugar de cambiar al especificado; simplemente iniciando el comando en el espacio de trabajo especificado.
  3. mueva el comando al espacio de trabajo especificado justo después de que se encuentre la ventana-id, en lugar de dormir 1 segundo. Esto es un poco importante para mí porque generalmente abro 8 terminales para cada espacio de trabajo y geometría X al inicio del inicio de sesión de escritorio. Esto tomaría más de 8 segundos cuando uso 'dormir 1' mientras mi script toma solo 2..3 segundos.

Aquí mi guión es:

#!/bin/sh
# = NAME
# lh - Launch Here
#
# = SYNOPSIS
# lh <workspace> <command> [<command-args>]
#
# = DESCRIPTION
# launch command (with any command-args) on a specific desktop/workspace.
#
# Example:
#
#   lh 2 xterm -geometry 80x46+881+0
#
# = Author
# Fumisky Wells

USAGE="USAGE: $(basename $0) workspace(0,1,2,..) command"
WRKSPC=$1;[ -z "$WRKSPC" ] && echo $USAGE && exit 0
shift; CMD="$*"; [ -z "$CMD" ] && echo $USAGE && exit 0    
WM=$(which wmctrl);[ -z "$WM" ] && echo MISSING wmctrl && exit 1    
eval "$CMD &"
pid=$!    
while :; do
  wid=$($WM -l -p | grep " $pid " | awk '{print $1}')
  if [ "$wid" != "" ]; then
    $WM -i -r $wid -t $WRKSPC
    exit
  fi
  # not found yet...
  sleep 0.1
done
Fumisky Wells
fuente
0

Instalar wmctrl

sudo apt install wmctrl

Y cree un script (en este ejemplo, Thunderbird en el segundo espacio de trabajo ( -t 1)):

#!/bin/sh
thunderbird 
wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1

Para conocer el nombre de su aplicación en wmctrl, puede verla tocando su terminal:

wmctrl -l

Y reemplácelo con el nombre correcto en el script.

¡Tenga cuidado con la letra mayúscula ("Thunderbird" no "thunderbird")!

Otro ejemplo con firefox en el espacio de trabajo 3d ( -t 2):

#!/bin/sh
firefox 
wmctrl -i -r `wmctrl -l | grep Firefox` -t 2

Trabaja en Debain 10 con canela. Pero debería funcionar para todos

pzim
fuente