Jak uruchomić aplikację w innym obszarze roboczym?

13

Muszę uruchomić aplikację GUI [Lotus Symphony] w obszarze roboczym innym niż obecnie używany. [np .: na pulpicie GNOME są 4 obszary robocze.]

P: Jak to zrobić?

ps: Jest potrzebny, ponieważ pierwszy start Lotus Symphony po ponownym uruchomieniu jest bardzo, bardzo wolny, ale po jednorazowym użyciu uruchamia się bardzo szybko. Myślę, że sama się buforuje. Dlatego chcę go uruchamiać przy każdym rozruchu w innym obszarze roboczym, więc będzie później szybko, jeśli będę musiał z niego korzystać.

LanceBaynes
źródło
Przypuszczam, że może być pomocne wiedzieć, jakiego systemu operacyjnego i jakiej wersji GNOME używasz.
enzotib,
ubuntu 10.04 - gnome-desktop-data 1: 2.30.2-0ubuntu1
LanceBaynes

Odpowiedzi:

8

Sprawdź Devil's Pie (chociaż nie jestem pewien, czy to zadziała z Gnome3), a znajdziesz więcej przydatnych informacji na temat bash stackoverflow .

Zasadniczo powinieneś wykonać następujące czynności:

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

(Właśnie skopiowałem i wstawiłem powyższy kod z linku StackOverFlow powyżej, ponieważ uważam, że jest to oczywiste).

AKTUALIZACJA:

Zobacz tutaj, aby znaleźć łatwiejsze rozwiązanie w najlepszej witrynie dla rozszerzeń Gnome 3, powinieneś zainstalować rozszerzenie Auto Move Windows dla Gnome 3. W przypadku, gdy nie działa ono dla ciebie (jak widać pod linkiem, istnieją pewne zakłócenia automatyzacja instalacji nie działa poprawnie, dowiedz się więcej o tym, jak ją uruchomić.

Hanan N.
źródło
2

Pierwotny post dotyczył używania skryptu do wyświetlania aplikacji w określonym obszarze roboczym, tak że w skrypcie startowym można użyć innego skryptu, aby umożliwić użytkownikowi kontynuowanie pracy, podczas gdy bardzo wolno uruchamiająca się aplikacja ładuje się w innym obszarze roboczym. Mój skrypt działa świetnie jako interfejs dla dość nieporęcznej składni wmctrl, aby uruchomić dowolną aplikację w dowolnym obszarze roboczym z dowolnego wiersza polecenia. Zatem dalszy skrypt, który po prostu wymienia coś takiego, lh 1 thunderbird; lh 2 firefox; lh 3 calculator.... lub cokolwiek, jest teraz łatwy. Istnieją jednak pewne trudności z timingiem, więc sen w moim skrypcie. Poniżej znajduje się zaktualizowana wersja, której nie będę utrzymywać ani publikować ponownie. Używaj TAK JAK JEST, bez gwarancji przydatności do określonego zastosowania. Zmodyfikuj, jak chcesz. Sugeruję oszczędzanie jako /usr/local/bin/lh, po prostu dlategolh nie jest żadną inną znaną nazwą programu, przynajmniej nie na Mennicy 18. Jeśli chodzi o zmienne - cytowałem zmienne, które uznałem za konieczne do cytowania.

#!/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
źródło
To jest świetne. Działa jak marzenie. Wielkie dzięki!
Mic
0

Beta - ale działa na mnie w przypadku 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
użytkownik278634
źródło
evalPowinno zdarzyć się na "$@", lub polecenie, jeśli którekolwiek z jej argument zawiera spacje lub znaki zastępcze znaki, nie będzie działać. Ogólnie rzecz biorąc, ten skrypt musi cytować zmienne rozszerzenia.
Kusalananda
0

Inspiruje mnie post @ user278634 w tym wątku, dziękuję.

Zmodyfikowałem to:

  1. zmień „eval $ CMD &” na „eval” $ CMD & ”z powodu otrzymania polecenia pid $!
  2. zachowaj bieżący obszar roboczy zamiast przełączania się na określony; po prostu uruchamiam polecenie w określonym obszarze roboczym.
  3. przenieś polecenie do określonego obszaru roboczego tuż po znalezieniu identyfikatora okna, zamiast uśpienia 1 sek. Jest to dla mnie trochę ważne, ponieważ zwykle otwieram 8 terminali dla każdego obszaru roboczego i geometrii X podczas uruchamiania logowania na pulpicie. Zajmie to więcej niż 8 sekund, gdy używasz „sleep 1”, podczas gdy mój skrypt zajmuje tylko 2..3 sekundy.

Oto mój skrypt:

#!/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
źródło
0

Zainstaluj wmctrl

sudo apt install wmctrl

I stwórz skrypt (w tym przykładzie thunderbird na drugim obszarze roboczym ( -t 1)):

#!/bin/sh

 (thunderbird &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"

Aby poznać nazwę aplikacji na wmctrl, możesz ją wyświetlić, dotykając terminala:

wmctrl -l

I zastąp go poprawną nazwą w skrypcie.

Bądź ostrożny z wielką literą („Thunderbird”, a nie „thunderbird”) !!

Inny przykład z firefoxem w przestrzeni roboczej 3d ( -t 2):

#!/bin/sh
(firefox &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Firefox` -t 2"

Bonus:

Oto polecenie, które należy wykonać podczas uruchamiania:

sh -c "thunderbird  & sleep 5 && wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"

Pracuj nad Debain 10 z Cinnamon. Ale powinien działać dla wszystkich

pzim
źródło