명령을 사용하여 애플리케이션을 작업 공간 1에서 2로 이동하는 방법


12

한 작업 공간에서 실행중인 응용 프로그램을 명령 줄의 다른 작업 공간으로 전환 할 수있는 방법이 있습니까? 우분투 10.04를 사용합니다

UPDATE1
아래 제안에 따라

 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

이제 내가 입력하면

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

그렇다면 올바르게 사용하는 방법 위의 실수는 무엇입니까?

UPDATE2
나는 시도했다

wmctrl -r 0x05000072 -t 2

그러나 창문은 효과가 없었으며 동일한 작업 공간에 남아있었습니다.


-r 및 -i 사용에 대한 더 나은 정보로 답변을 업데이트했습니다. 공백이 포함 된 경우 -r에 대한 인수는 "따옴표"로 묶어야합니다. -r에 대한 인수가 창 ID 인 경우 명령 행에 -i도 지정해야합니다.

답변:


14

Metacity (Unity 2-d)와 같은 호환 가능한 창 관리자를 사용하는 경우 wmctrl을 사용하여 창을 다른 데스크탑으로 전환 할 수 있습니다. 구문은 wmctrl -r :ACTIVE: -t <DESKTOP>입니다. 을 사용하여 현재 바탕 화면을 변경할 수도 있습니다 wmctrl -s <DESKTOP>. 데스크탑 번호는 0에서 시작합니다. 한 줄에 다음과 같습니다.

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

활성 창 이외의 창을 다른 데스크탑으로 전환하려면 제목의 텍스트를 -r의 인수로 사용하십시오. 예를 들면 다음과 같습니다.

wmctrl -r "Chromium" -t 1

또는 사용 wmctrl -l가능한 창을 나열하고 특수 문자열 대신 ID 번호를 -r에 전달하는 데 사용할 수 있습니다 :ACTIVE:. ID를 전달할 때 -i도 추가해야합니다. 예를 들면 다음과 같습니다.

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

(wmctrl은와 함께 Ubuntu에 설치할 수 있습니다 sudo apt-get install wmctrl.) 현재 불행히도 표준 Unity에서는 작동하지 않는 것 같습니다.


@skyblue Great info. 내가 분명하지 않은 한 가지 참조하십시오. 데스크톱 창을 아는 방법과 내가 찾고있는 것은 크롬이 실행 중이고 크롬이 현재 데스크탑에서 다른 데스크탑으로 전환 한 다음 이동하는 방법입니다 이를 위해.
등록 된 사용자

Chrome 브라우저 (제목에 "Chromium"이있는)를 사용하는 경우 wmctrl -r "Chromium" -t 1Unity-2d와 같은 호환되는 창 관리자를 사용하는 한 그의 답변에서 skyblue 언급 으로 사용할 수 있습니다 .
John S Gruber

3

다음은 요청한 내용을 구현하는 스크립트입니다. https://github.com/norswap/wmov/blob/master/wmov.sh

현재 형식에서는 wmctrl -r명시 적 데스크톱 번호를 선택하거나 현재의 데스크톱 방향을 표시하여 창을 (대소 문자를 구분하지 않는 문자열을 하위 문자열 제목과 일치시켜 선택) 다른 데스크톱에 보낼 수 있습니다 데스크탑.

예를 들어 :

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

desgua의 게시물에 설명 된대로 실제로 작동합니다. 또한 다른 작업 공간으로 창을 보내는 기능도 있습니다.


이 솔루션은 창 이름과 부분적으로 일치하는 창을 식별 할 수 있기 때문에 특히 상황에 따라 프로그램이 이름의 일부를 수정할 때 유용합니다. PID를 조회하는 것보다 이름으로 창을 호출하는 것이 더 쉽습니다. 단점은 이름에 같은 문자열을 가진 창이 여러 개 있으면 어느 wmov.sh가 어떤 창을 가져올 지 예측할 수 없다는 것입니다.
Andrew P.

3

이 작업을 수행 할 수 있습니다 xdotool, 하지만 당신이 사용하는 경우에는 compiz적용되지 않을 수있는이 솔루션을, 그래서이 점을 염두에 두시기 바랍니다.

특정 창 (활성 창)을 다른 작업 공간으로 전환하려면

xdotool getactivewindow set_desktop_for_window 1

또는 스크립트의 경우 다음을 사용하여 특정 프로그램의 창을 지정된 작업 공간으로 전환 할 수 있습니다.

xdotool search --class firefox set_desktop_for_window %@ 1

이 명령은 firefox창을 찾아서 찾아서 작업 공간 1로 전송합니다. firefox기본 데스크탑으로 돌아가려면 명령 끝에서 1을 0으로 바꾸십시오. 다른 작업 공간으로 다른 창을 보내려면 firefox다른 프로그램 이름으로 바꾸십시오 .

창이 전송되지 않는 것처럼 매개 변수 %@에서 전달 된 창을 나타내는 데 사용 하는 것이 중요합니다 --search.

자세한 내용은 온라인man xdotoolUbuntu 맨 페이지를 참조하십시오.



1

첫째, 콜론은 :ACTIVE:활성 창을 나타내는 마법 토큰의 일부입니다 . 일반적으로 원하지 않습니다. 둘째, 공백이있는 문자열을 인용해야합니다.

창 ID ( 0x...각 줄의 시작 부분)를 가져 와서 제목을 작동시키는 대신 사용할 수 있습니다.

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

창 ID를 얻는 또 다른 방법은 실행 xwininfo한 다음 ID를 원하는 창을 클릭하는 것입니다.
geekosaur

나는 당신의 방법을 시도했지만 문제의 창에 아무런 영향을 미치지 않았습니다.
등록 된 사용자

@ 등록 된 사용자 : 어떤 창 관리자? ( wmctrl -m)
geekosaur

응답이 늦어 죄송합니다. wmctrl -m 이름 : compiz 클래스 : 해당 사항 없음 PID : 해당 사항 없음 창 관리자의 "데스크탑 표시"모드 : 꺼짐
등록 된 사용자

흠 Compiz 플러그인 사용 제안에 따라 Compiz는 실제로 전체 EWMH 사양을 구현하지 않으므로 wmctrl작동하지 않을 것이라고 생각합니다. (특히, PropertyChange특정 속성에 대한 루트 창 에서 이벤트 를 수신 한 다음 해당 속성의 내용에 따라 행동해야합니다.)
geekosaur

0

이 질문에 대한 해결책으로 제공된 스크립트를 약간 수정 하여 다음은 주어진 창을 현재 작업 공간으로 가져옵니다 (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

임의의 작업 공간이 필요한 경우 창을 대상 작업 공간에서 멀리 떨어진 작업 공간 수만큼 해당 $SCREEN_W/ 를 추가 / $SCREEN_H제거해야합니다.


0

시험:

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

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 내 컴퓨터에서 모든 작업 공간을 나열 할 수 있습니다. 이제 다음과 같이 표시됩니다.

0-DG : 1600x900 VP : 해당 없음 WA : 0,0 1600x868 코드
1 * DG : 1600x900 VP : 0,0 WA : 0,0 1600x868 재생 
2-DG : 1600x900 VP : N / A WA : 0,01600x868 연구

*는 현재 작업 공간을 의미합니다

BTW wmctrl -l는 (내가 이미 알고있는) 모든 창을 내 컴퓨터에 나열하는 것입니다.

0x05400008 1 사용자 -LinuxMint 터미널
0x03a0008e 0 사용자 -LinuxMint Mozilla Firefox


"DESK"는 숫자 여야하기 때문에 나는 grep “workspace name” | cut -d" " -f1그것을 얻기 위해 사용 합니다.

예를 들어 Firefox를 workspace "code"로 옮기려면 다음을 사용할 수 있습니다.

wmctrl -r "firefox" -t 0 

또는

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

그러나

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

한 번만 일하면 왜 그런지 모르겠어요!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.