web-dev-qa-db-fra.com

comment déplacer des applications de l'espace de travail 1 à 2 à l'aide de la commande

Existe-t-il un moyen de basculer l'application en cours d'exécution d'un espace de travail à un autre en ligne de commande? J'utilise Ubuntu 10.04

PDATE1
Selon les suggestions ci-dessous

 wmctrl -l
0x02200003 -1 bond Bottom Expanded Edge Panel
0x02200049 -1 bond Top Expanded Edge Panel
0x02000020  0 bond x-nautilus-desktop
0x04e00004  0 bond bond@bond: ~
0x0482a380  0 bond OMG! Ubuntu! | wmctrl - Chromium
0x05000072  0 bond how to shift applications from workspace 1 to 2 using command - Ask Ubuntu - Stack Exchange - Google Chrome

maintenant, quand je tape

wmctrl -r :OMG! Ubuntu! | wmctrl - Chromium: -t 2 No window was specified.

Alors, comment l'utiliser correctement, quelle est l'erreur ci-dessus?

PDATE2
J'ai essayé

wmctrl -r 0x05000072 -t 2

mais les fenêtres n'avaient aucun effet et elles restaient dans le même espace de travail.

9
Registered User

Si vous utilisez un gestionnaire de fenêtres compatible tel que Metacity (Unity 2-d), vous pouvez utiliser wmctrl pour passer d'une fenêtre à un autre bureau. La syntaxe est wmctrl -r :ACTIVE: -t <DESKTOP>. Vous pouvez également changer votre bureau actuel en utilisant wmctrl -s <DESKTOP>. Les numéros de bureau commencent à 0. Sur une ligne, cela serait:

wmctrl -r :ACTIVE: -t 1; wmctrl -s 1

Si vous souhaitez basculer une fenêtre autre que la fenêtre active vers un autre bureau, utilisez le texte du titre comme argument comme argument -r. Par exemple:

wmctrl -r "Chromium" -t 1

Vous pouvez également utiliser wmctrl -l pour répertorier les fenêtres disponibles et transmettre le numéro d'identification à -r au lieu de la chaîne spéciale :ACTIVE:. Lorsque vous transmettez un identifiant, vous devez également ajouter -i. Par exemple:

$ wmctrl -l
0x03e00189  0 hostname Ask Ubuntu - Chromium
$ wmctrl -i -r 0x03e00189 -t 2

(wmctrl peut être installé sur Ubuntu avec Sudo apt-get install wmctrl.) À l'heure actuelle, cela ne semble malheureusement pas fonctionner avec Unity standard.

11
skyblue

Voici un de mes scripts qui met en œuvre ce que vous demandez: https://github.com/norswap/wmov/blob/master/wmov.sh

Dans sa forme actuelle, il peut envoyer des fenêtres (sélectionnées en faisant correspondre une chaîne ne respectant pas la casse avec le titre des sous-chaînes, comme pour l'option wmctrl-r] vers d'autres bureaux, en choisissant un numéro de bureau explicite ou en indiquant la direction du bureau à partir du bureau actuel.

Par exemple:

./wmov.sh mov "Google Chrome" 3 # sends Chrome to desktop 3 (bottom left)
./mov.sh mov Skype right # sends Skype to the desktop to the right of
                         # the current desktop (if any)

Cela fonctionne en effet comme décrit dans le post de Desgua. C'est aussi la possibilité d'envoyer des fenêtres à d'autres espaces de travail.

3
Norswap

Si vous utilisez Compiz, regardez ici compiz wiki . Vous y trouverez plusieurs exemples. Regardez le plugin "put".

Exemple

./compiz-dbus-send.py put put_viewport_right_key
2
nsg

Il est possible de faire cela avec xdotool, mais si vous utilisez compiz cette solution peut ne pas être applicable, veuillez donc Garde ça en tête.

Pour basculer d’une fenêtre particulière (la fenêtre active) vers un autre espace de travail, vous pouvez utiliser

xdotool getactivewindow set_desktop_for_window 1

Ou, pour un script, vous pourriez vouloir basculer les fenêtres d'un programme particulier vers un espace de travail donné avec:

xdotool search --class firefox set_desktop_for_window %@ 1

Cette commande recherche et trouve la ou les fenêtres firefox et les transfère vers l’espace de travail 1, où elles apparaissent réduites. Pour retourner firefox sur le bureau par défaut, il suffit de remplacer le 1 par un 0 à la fin de la commande. Pour envoyer une autre fenêtre à un autre espace de travail, remplacez simplement firefox par un autre nom de programme.

Il est essentiel d’utiliser %@ pour représenter les fenêtres transmises par le paramètre --search, comme si ce n’était pas le cas, aucune fenêtre ne serait transférée.

Pour plus d'informations, voir man xdotool et les pages de manuel Ubuntu en ligne.

1
user76204

Premièrement, les deux points font partie du jeton magique :ACTIVE: pour indiquer la fenêtre active. Vous ne le voulez pas normalement. Deuxièmement, vous devez citer des chaînes avec des espaces.

Vous pouvez également obtenir l'ID de la fenêtre (le 0x... au début de chaque ligne) et l'utiliser au lieu d'essayer de faire fonctionner le titre.

$ wmctrl -r 'OMG! Ubuntu! | wmctrl - Chromium' -t 2 # wherever it is, move it to 2
$ wmctrl -r 0x0482a380 -t 2 # same thing
1
geekosaur

En modifiant un peu le script donné comme solution à cette question , le texte suivant "amène" une fenêtre donnée dans l'espace de travail actuel (en format compiz):

#!/bin/bash

SCREEN_W=$(xwininfo -root | sed -n 's/^  Width: \(.*\)$/\1/p')
SCREEN_H=$(xwininfo -root | sed -n 's/^  Height: \(.*\)$/\1/p')

NAME="$1"

wmctrl -xlG | awk -v NAME="$NAME" '$7==NAME {print $1}' | while read WINS; do wmctrl -ir "$WINS" -e "0,0,0,$SCREEN_W,$SCREEN_H"; done

exit 0

Si vous souhaitez utiliser un espace de travail arbitraire, vous devez ajouter/soustraire le $SCREEN_W/$SCREEN_H correspondant, autant de fois qu'un espace de travail est séparé d'une fenêtre par une fenêtre.

0
ivotron

Essayer:

wmctrl -r “window name(or any string in the title)” -t `wmctrl -d | grep “workspace name” | cut -d" " -f1`

laissez-moi vous expliquer: à l'aide des spectacles de wmctrl

    -r <WIN> -t <DESK>   Move the window to the specified desktop.
    <DESK>               A desktop number. Desktops are counted from zero.
    <WIN>          This argument specifies the window. By default it's
                   interpreted as a string. The string is matched
                   against the window titles and the first matching
                   window is used. The matching isn't case sensitive
                   and the string may appear in any position
                   of the title.

                   The -i option may be used to interpret the argument
                   as a numerical window ID represented as a decimal
                   number. If it starts with "0x", then
                   it will be interpreted as a hexadecimal number.

wmctrl -d peut répertorier tous les espaces de travail. Dans mon ordinateur, s'affiche désormais comme suit:

 0 - DG: 1600x900 VP: N/A WA: 0,0 Code 1600x868 
 1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 lecture 
 2 - DG: 1600x900 VP: N/A WA: 0,01600x868 recherche 

* signifie l'espace de travail actuel

BTW, wmctrl -l est de lister toutes les fenêtres (que vous connaissez déjà), sur mon ordinateur maintenant, elles sont:

 0x05400008 1 utilisateur-Terminal LinuxMint 
 0x03a0008e 0 utilisateur-LinuxMint Mozilla Firefox 


étant donné que "DESK" doit être le numéro, j’utilise grep “workspace name” | cut -d" " -f1 pour l’obtenir.

Par exemple, si je veux déplacer Firefox dans l'espace de travail "code", je peux utiliser:

wmctrl -r "firefox" -t 0 

ou

wmctrl -r "moz" -t `wmctrl -d | grep "code" | cut -d" " -f1`

mais

wmctrl -r -i 0x03a0008e -t `wmctrl -d | grep "code" | cut -d" " -f1`

Travaille moi juste une fois, et je ne sais pas pourquoi!

0
highwind