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


12

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

UPDATE1
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?

UPDATE2
j'ai essayé

wmctrl -r 0x05000072 -t 2

mais les fenêtres n'ont eu aucun effet et elles sont restées dans le même espace de travail.


J'ai mis à jour ma réponse avec de meilleures informations sur l'utilisation de -r et -i. L'argument de -r doit être placé entre "guillemets" s'il contient des espaces. Si l'argument de -r est l'ID de la fenêtre, vous devez également spécifier -i sur la ligne de commande.

Réponses:


14

Si vous utilisez un gestionnaire de fenêtres conforme comme Metacity (Unity 2-d), vous pouvez utiliser wmctrl pour basculer une fenêtre vers un autre bureau. La syntaxe est wmctrl -r :ACTIVE: -t <DESKTOP>. Vous pouvez également modifier votre bureau actuel à l'aide de wmctrl -s <DESKTOP>. Les numéros de bureau commencent à 0. Sur une ligne, ce serait:

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

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

wmctrl -r "Chromium" -t 1

Vous pouvez également utiliser wmctrl -lpour 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 passez 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.


@skyblue Grande info.Voir une chose que je ne sais pas comment savoir la fenêtre du bureau non et aussi ce que je cherche c'est supposer que le chrome est en marche et que je veux que le chrome passe de mon bureau actuel à un autre puis comment y aller pour ça.
Utilisateur enregistré le

Si vous utilisez le navigateur Chrome (qui a "Chromium" dans le titre, vous devriez pouvoir l'utiliser wmctrl -r "Chromium" -t 1comme le mentionne skyblue dans sa réponse, tant que vous utilisez un gestionnaire de fenêtres conforme comme Unity-2d.
John S Gruber

3

Voici un de mes scripts qui implémente 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 insensible à la casse au titre des sous-chaînes, comme pour l' wmctrl -roption) vers d'autres bureaux, soit en choisissant un numéro de bureau explicite, soit en indiquant la direction du bureau à partir du courant bureau.

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 l'article de Desgua. Il a également la capacité d'envoyer des fenêtres à d'autres espaces de travail.


J'aime cette solution, car elle peut identifier les fenêtres avec des correspondances partielles du nom de la fenêtre, particulièrement utile lorsque les programmes modifient une partie de leur nom, selon le contexte. Il est plus facile d'appeler des fenêtres par nom que de rechercher leurs PID. L'inconvénient est que s'il y a plusieurs fenêtres avec la même chaîne dans le nom, on ne peut pas prédire lequel wmov.sh va récupérer.
Andrew P.

3

Il est possible de le faire avec xdotool, mais si vous utilisez compizcette solution peut ne pas être applicable, veuillez donc garder cela à l'esprit.

Pour basculer 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 voudrez peut-être 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 les firefoxfenêtres et les transfère vers l'espace de travail 1, où elles apparaîtront réduites. Pour revenir firefoxau bureau par défaut, remplacez simplement le 1 par un 0 à la fin de la commande. Pour envoyer une fenêtre différente vers un autre espace de travail, remplacez simplement firefoxpar un autre nom de programme.

Il est essentiel que vous utilisiez %@pour représenter les fenêtres transmises à partir du --searchparamètre, comme si vous ne le faites pas, aucune fenêtre ne sera transférée.

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


2

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

Exemple

./compiz-dbus-send.py put put_viewport_right_key

1

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

Vous pouvez également obtenir l'ID de la fenêtre ( 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

Une autre façon d'obtenir les ID de fenêtre consiste à exécuter xwininfo, puis à cliquer sur la fenêtre dont vous voulez l'ID.
geekosaur

J'ai essayé votre méthode mais cela n'a eu aucun effet sur la fenêtre en question.
Utilisateur enregistré le

@Utilisateur inscrit: quel gestionnaire de fenêtres? ( wmctrl -m)
geekosaur

désolé pour la réponse différée wmctrl -m Nom: compiz Classe: N / A PID: N / A Mode "affichage du bureau" du gestionnaire de fenêtres: OFF
Utilisateur enregistré le

Hrm. Je vais deviner, sur la base des suggestions d'utilisation des plugins Compiz, que Compiz n'implémente pas réellement la spécification EWMH complète et wmctrlne fonctionnera donc pas. (Plus précisément, il doit écouter les PropertyChangeévénements sur la fenêtre racine pour des propriétés particulières, puis agir sur le contenu de ces propriétés.)
geekosaur

0

En modifiant un peu le script qui lui est donné comme solution à cette question , ce qui suit "apporte" une fenêtre donnée à l'espace de travail courant (en 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 un espace de travail arbitraire est souhaité, il s'agit d'ajouter / de soustraire le $SCREEN_W/ correspondant $SCREEN_H, autant de fois que d'espaces de travail une fenêtre est éloignée de la cible.


0

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 de wmctrl montre

    -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 maintenant comme suit:

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

* signifie l'espace de travail actuel

BTW, wmctrl -lc'est de lister toutes les fenêtres (que vous connaissiez déjà), dans mon ordinateur maintenant ce sont:

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


puisque le "DESK" doit être le numéro, j'utilise grep “workspace name” | cut -d" " -f1pour l'obtenir.

Par exemple, si je veux déplacer Firefox vers le "code" de l'espace de travail, 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!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.