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.
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.
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.
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
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.
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
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.
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!