Como iniciar um aplicativo em um espaço de trabalho diferente?

13

Preciso iniciar um aplicativo da GUI [Lotus Symphony] em um espaço de trabalho diferente do usado atualmente. [ex .: existem 4 áreas de trabalho em uma área de trabalho do GNOME.]

P: Como faço isso?

ps: é necessário porque o primeiro início do Lotus Symphony após uma reinicialização é muito, muito lento, mas depois de ser usado uma vez, é iniciado muito rapidamente. Eu acho que ele se armazena em cache. É por isso que eu quero iniciá-lo a cada inicialização em um espaço de trabalho diferente, para que seja mais rápido se precisar usá-lo.

LanceBaynes
fonte
Suponho que poderia ser útil saber qual sistema operacional e qual versão do GNOME você está usando.
enzotib
Ubuntu 10.04 - gnome-desktop-data 1: 2.30.2-0ubuntu1
LanceBaynes

Respostas:

8

Confira a Torta do Diabo (embora eu não tenha certeza de que funcionaria com o Gnome3), e você pode encontrar informações mais úteis sobre o stackoverflow bash .

Basicamente, você deve fazer o seguinte:

#!/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 

(Acabei de copiar e inserir o código acima no link StackOverFlow acima, pois acho que é auto-explicativo).

ATUALIZAR:

Consulte aqui para obter uma solução mais fácil no melhor site para extensões do Gnome 3, você deve instalar a extensão Auto Move Windows para o Gnome 3. Caso isso não esteja funcionando para você (como você pode ver no link, existem algumas distros que os Se a automação da instalação não estiver funcionando corretamente, obtenha explorações mais detalhadas aqui sobre como fazê-lo funcionar.

Hanan N.
fonte
2

A postagem original dizia respeito ao uso de um script para fazer um aplicativo aparecer em um espaço de trabalho específico, de modo que outro script possa ser usado no script de Inicialização para permitir que o usuário continue trabalhando enquanto um aplicativo inicial muito lento é carregado em outro espaço de trabalho. Meu script funciona muito bem como front-end para a sintaxe bastante complicada do wmctrl, para iniciar qualquer aplicativo em qualquer espaço de trabalho, em qualquer prompt de comando. Portanto, um outro script que simplesmente lista algo como lh 1 thunderbird; lh 2 firefox; lh 3 calculator... ou qualquer outra coisa agora é fácil. No entanto, existem algumas dificuldades com o tempo, portanto, o sono no meu script. A seguir, a versão atualizada, que não vou manter ou publicar novamente. Use COMO ESTÁ, nenhuma garantia de adequação a qualquer uso específico. Modifique como quiser. Sugiro salvar como /usr/local/bin/lh, simplesmente porquelh não existe outro nome de programa conhecido, pelo menos não na Casa da Moeda 18. Quanto às variáveis ​​- citei variáveis ​​que julguei necessárias.

#!/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
fonte
Isto é tão bom. Funciona como um encanto. Muito obrigado!
Mic
0

Beta - mas funciona para mim no 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
user278634
fonte
A evaldeve eventualmente acontecer em "$@", ou o comando, se algum de seu argumento contém espaços ou caracteres de nome de arquivo englobamento, não vai funcionar. Em geral, esse script precisa citar expansões variáveis.
Kusalananda
0

Estou inspirado na postagem de @ user278634 neste tópico, obrigado.

O que eu modifiquei é:

  1. mude 'eval $ CMD &' para 'eval "$ CMD &"' por causa do comando pid $ !.
  2. mantenha o espaço de trabalho atual em vez de alternar para o especificado; apenas iniciando o comando no espaço de trabalho especificado.
  3. mova o comando para o espaço de trabalho especificado logo após a identificação da janela ser encontrada, em vez de dormir 1 segundo. Isso é um pouco importante para mim, porque geralmente abro 8 terminais para cada espaço de trabalho e geometria X na inicialização do login na área de trabalho. Isso levaria mais de 8 segundos ao usar 'sleep 1' enquanto meu script leva apenas 2 a 3 segundos.

Aqui meu script é:

#!/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
fonte