Come avviare un'applicazione su un'area di lavoro diversa?


13

Devo avviare un'applicazione GUI [Lotus Symphony] su un'area di lavoro diversa da quella attualmente in uso. [es .: ci sono 4 aree di lavoro su un desktop GNOME.]

Q: Come posso farlo?

ps: È necessario perché il primo avvio di Lotus Symphony dopo un riavvio è molto, molto lento, ma dopo che è stato usato una volta, si avvia molto rapidamente. Penso che si memorizzi nella cache. Ecco perché voglio avviarlo ad ogni avvio in uno spazio di lavoro diverso, quindi sarà più veloce se devo usarlo.


Suppongo che potrebbe essere utile sapere quale sistema operativo e quale versione di GNOME stai usando.
enzotib,

ubuntu 10.04 - gnome-desktop-data 1: 2.30.2-0ubuntu1
LanceBaynes

Risposte:


8

Dai un'occhiata a Devil's Pie (anche se non sono sicuro che funzionerebbe con Gnome3), e puoi trovare ulteriori informazioni utili su stackoverflow bash .

Fondamentalmente dovresti fare quanto segue:

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

(Ho appena copiato e compilato il codice sopra dal link StackOverFlow sopra, poiché penso che sia autoesplicativo).

AGGIORNARE:

Vedi qui per una soluzione più semplice sul miglior sito per le estensioni di Gnome 3, dovresti installare l' estensione di spostamento automatico di Windows per Gnome 3. Nel caso in cui non funzioni per te (come puoi vedere al link ci sono alcune distro che il l'automazione dell'installazione non funziona correttamente, ottieni uno sfruttamento più dettagliato qui su come farlo funzionare.


2

Il post originale riguardava l'uso di uno script per far apparire un'applicazione in un particolare spazio di lavoro, in modo tale che un altro script potesse essere usato nello script di avvio per consentire a un utente di continuare a lavorare mentre un'applicazione di avvio molto lenta veniva caricata su un altro spazio di lavoro. Il mio script funziona alla grande come front-end per la sintassi wmctrl piuttosto ingombrante, per avviare qualsiasi applicazione su un determinato spazio di lavoro, da qualsiasi prompt dei comandi. Quindi un ulteriore script che elenca semplicemente qualcosa come, lh 1 thunderbird; lh 2 firefox; lh 3 calculator.... o qualsiasi altra cosa, ora è facile. Vi sono tuttavia alcune difficoltà con i tempi, quindi il sonno nella mia sceneggiatura. Quella che segue è la versione aggiornata, che non manterrò né invierò più. Utilizzare COSÌ COM'È, nessuna garanzia di idoneità per qualsiasi uso particolare. Modifica come preferisci. Suggerisco di salvare come /usr/local/bin/lh, semplicemente perchélh non è un altro nome di programma noto, almeno non sulla Menta 18. Per quanto riguarda le variabili, ho citato le variabili che ho ritenuto necessarie per essere quotate.

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

È fantastico Funziona come un fascino. Molte grazie!
Mic

0

Beta - ma funziona per me su 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

L' evaldovrebbe accadere sul "$@", o il comando, se qualcuno della sua tesi contiene spazi o caratteri filename globbing, non funzionerà. In generale, questo script deve citare espansioni variabili.
Kusalananda

0

Sono ispirato dal post di @ user278634 in questa discussione, grazie.

Quello che ho modificato è:

  1. cambia 'eval $ CMD &' in 'eval "$ CMD &"' a causa del comando pid $ !.
  2. mantenere lo spazio di lavoro corrente anziché passare a quello specificato; semplicemente lanciando il comando nell'area di lavoro specificata.
  3. sposta il comando nell'area di lavoro specificata subito dopo aver trovato id-finestra, anziché dormire 1 sec. Questo è un po 'importante per me perché di solito apro 8 terminali per ogni area di lavoro e geometria X all'avvio di desktop-login. Questo richiederebbe più di 8 secondi quando si usa 'sleep 1' mentre il mio script impiega solo 2..3 sec.

Ecco la mia sceneggiatura:

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

0

Installa wmctrl

sudo apt install wmctrl

E crea uno script (in questo esempio thunderbird nel secondo spazio di lavoro ( -t 1)):

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

Per conoscere il nome della tua applicazione su wmctrl puoi visualizzarlo toccando sul tuo terminale:

wmctrl -l

E sostituiscilo con il nome corretto nello script.

Sii attento con la lettera maiuscola ("Thunderbird" non "thunderbird") !!

Altro esempio con Firefox su 3d workspace ( -t 2):

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

Lavora su Debain 10 con Cannella. Ma dovrebbe funzionare per tutti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.