como mudar aplicativos do espaço de trabalho 1 para 2 usando o comando


12

Existe alguma maneira de alternar o aplicativo em execução em um espaço de trabalho para outro na linha de comando? Eu uso o Ubuntu 10.04

UPDATE1
Conforme as sugestões abaixo

 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

agora quando eu digito

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

Então, como usá-lo corretamente, qual é o erro acima?

UPDATE2
eu tentei

wmctrl -r 0x05000072 -t 2

mas as janelas não tiveram efeito e permaneceram no mesmo espaço de trabalho.


Atualizei minha resposta com melhores informações sobre o uso de -r e -i. O argumento para -r deve ser colocado entre "aspas" se contiver espaços. Se o argumento para -r for o ID da janela, você também precisará especificar -i na linha de comandos.

Respostas:


14

Se você estiver usando um gerenciador de janelas compatível como o Metacity (Unity 2-d), poderá usar o wmctrl para alternar uma janela para outra área de trabalho. A sintaxe é wmctrl -r :ACTIVE: -t <DESKTOP>. Você também pode alterar sua área de trabalho atual usando wmctrl -s <DESKTOP>. Os números da área de trabalho começam em 0. Em uma linha, isso seria:

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

Se você deseja alternar uma janela diferente da ativa para outra área de trabalho, use o texto do título como argumento para -r. Por exemplo:

wmctrl -r "Chromium" -t 1

Como alternativa, você pode usar wmctrl -lpara listar as janelas disponíveis e passar o número de identificação para -r em vez da sequência especial :ACTIVE:. Ao passar um ID, você também precisará adicionar -i. Por exemplo:

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

(O wmctrl pode ser instalado no Ubuntu com sudo apt-get install wmctrl.) No momento, isso não parece funcionar com o Unity padrão, infelizmente.


@skyblue Ótima informação. Veja uma coisa que não estou claro é como sei se a janela da área de trabalho não e também o que estou procurando é supor que o chrome esteja em execução e eu quero que o chrome mude da minha área de trabalho atual para outra e depois como prosseguir por esta.
Usuário registrado

Se você estiver usando o navegador Chrome (que possui "Chromium" no título, poderá usar wmctrl -r "Chromium" -t 1como menções ao skyblue em sua resposta, desde que esteja usando um gerenciador de janelas compatível como o Unity-2d.
John S Gruber

3

Aqui está um script meu que implementa o que você pergunta: https://github.com/norswap/wmov/blob/master/wmov.sh

Em sua forma atual, ele pode enviar janelas (selecionadas combinando uma sequência que não diferencia maiúsculas de minúsculas do título de substrings, como para a wmctrl -ropção) a outras áreas de trabalho, escolhendo um número explícito da área de trabalho ou indicando a direção da área de trabalho a partir da atual Área de Trabalho.

Por exemplo:

./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)

Funciona de fato como descrito no post de desgua. Ele também possui os recursos para enviar janelas para outros espaços de trabalho.


Eu gosto dessa solução, porque ela pode identificar janelas com correspondências parciais do nome da janela, especialmente útil quando os programas modificam parte de seu nome, dependendo do contexto. Chamar janelas pelo nome é mais fácil do que procurar seus PIDs. A desvantagem é que, se houver várias janelas com a mesma string no nome, não será possível prever qual delas o wmov.sh irá capturar.
Andrew P.

3

É possível fazer isso xdotool, mas se você estiver usando compizesta solução pode não ser aplicável, lembre-se disso.

Para alternar uma janela específica (a janela ativa) para um espaço de trabalho diferente, você pode usar

xdotool getactivewindow set_desktop_for_window 1

Ou, para um script, convém alternar as janelas de um programa específico para um determinado espaço de trabalho com:

xdotool search --class firefox set_desktop_for_window %@ 1

Este comando pesquisa e localiza as firefoxjanelas e as transfere para o espaço de trabalho 1, onde elas aparecerão minimizadas. Para retornar firefoxà área de trabalho padrão, basta substituir o 1 por um 0 no final do comando. Para enviar uma janela diferente para outro espaço de trabalho, substitua firefoxpor outro nome de programa.

É crucial que você use %@para representar as janelas passadas a partir do --searchparâmetro, como se você não tivesse nenhuma janela será transferida.

Para mais informações, consulte man xdotoole o Ubuntu manpages online.


2

Se você estiver usando o compiz, veja aqui no wiki do compiz . Lá você encontra vários exemplos. Veja o plugin "put".

Exemplo

./compiz-dbus-send.py put put_viewport_right_key

1

Primeiramente, os dois pontos fazem parte do :ACTIVE:token mágico para indicar a janela ativa. Você não quer isso normalmente. Segundo, você precisa citar cadeias de caracteres com espaços nelas.

Você também pode obter o ID da janela ( 0x...no início de cada linha) e usá-lo em vez de tentar fazer o título funcionar.

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

Outra maneira de obter IDs de janela é executar xwininfoe clicar na janela cujo ID você deseja.
Geekosaur

Eu tentei o seu método, mas ele não teve nenhum efeito na janela em questão.
Usuário registrado

@ Usuário Registrado: Que gerenciador de janelas? ( wmctrl -m)
geekosaur 21/03

desculpe pelo atraso Responder wmctrl -m Nome: compiz Classe: N / A PID: N / A Modo "mostrando a área de trabalho" do gerenciador de janelas: OFF
Usuário registrado

Hrm. Vou adivinhar, com base nas sugestões para usar plug-ins do Compiz, que o Compiz não implementa realmente a especificação completa do EWMH, portanto wmctrlnão vai funcionar. (Especificamente, ele tem que ouvir para PropertyChangeeventos janela de raiz pelas propriedades particulares e, em seguida, agir sobre o conteúdo dessas propriedades.)
geekosaur

0

Modificando um pouco o script fornecido como solução para esta pergunta , o seguinte "traz" uma determinada janela para o espaço de trabalho atual (no 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

Se um espaço de trabalho arbitrário for desejado, é uma questão de adicionar / subtrair o $SCREEN_W/ correspondente $SCREEN_H, quantas vezes os espaços de trabalho uma janela estiver longe da de destino.


0

Tentar:

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

deixe-me explicar: na ajuda de wmctrl shows

    -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 pode listar todos os espaços de trabalho, no meu computador agora mostra o seguinte:

0 - DG: 1600x900 VP: N / A WA: código 0,0 1600x868
1 * DG: 1600x900 VP: 0,0 WA: 0,0 jogo de 1600x868 
2 - DG: 1600x900 VP: N / A WA: pesquisa de 0,01600x868

* significa o espaço de trabalho atual

BTW, wmctrl -lé listar todas as janelas (que você já conhece), no meu computador agora elas são:

0x05400008 1 usuário-LinuxMint Terminal
0x03a0008e 0 usuário-LinuxMint Mozilla Firefox


como o "DESK" deve ser o número, eu uso grep “workspace name” | cut -d" " -f1para obtê-lo.

Por exemplo, se eu quiser mover o Firefox para o "código" da área de trabalho, posso usar:

wmctrl -r "firefox" -t 0 

ou

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

mas

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

Apenas trabalhe comigo uma vez e não sei por quê!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.