コマンドを使用してアプリケーションをワークスペース1から2に移行する方法


12

コマンドラインで、あるワークスペースで実行されているアプリケーションを別のワークスペースに切り替える方法はありますか?私はUbuntu 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から始まります。1行で、これは次のようになります。

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素晴らしい情報私が明確ではないことの1つは、デスクトップウィンドウがいかにわかっているか、そして私が探しているのは、クロムが実行されていて、クロムを現在のデスクトップから別のデスクトップに切り替えてからどうすればよいかということですこのため。
登録ユーザー

あなたはタイトルに「クロム」を持っているChromeブラウザを(使用している場合は、使用することができるはずwmctrl -r "Chromium" -t 1あなたはユニティ2Dのような準拠のウィンドウマネージャを使用しているとして、スカイブルーは彼の答えに言及限り、。
ジョン・Sグルーバー

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 xdotoolオンラインUbuntuマンページを参照してください


2

compizを使用している場合は、compiz wikiをご覧ください。そこにいくつかの例があります。「put」プラグインを見てください。

./compiz-dbus-send.py put put_viewport_right_key

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を取得するもう1つの方法は、実行xwininfoしてから、IDが必要なウィンドウをクリックすることです。
ギーコサウルス

私はあなたの方法を試しましたが、問題のウィンドウには何の影響もありませんでした。
登録ユーザー

@登録ユーザー:どのウィンドウマネージャーですか?(wmctrl -m
ギーコサウルス

遅れて返信してすみませんwmctrl -m名前:compizクラス:N / A PID:N / Aウィンドウマネージャーの「デスクトップを表示」モード:オフ
登録ユーザー

Hrm。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:N / A WA:0,0 1600x868コード
1 * DG:1600x900 VP:0,0 WA:0,0 1600x868再生 
2-DG:1600x900 VP:N / A WA:0,01600x868調査

*は現在のワークスペースを意味します

ところで、wmctrl -l私のコンピュータですべてのウィンドウ(あなたがすでに知っている)をリストすることです、今それらは:

0x05400008 1ユーザー-LinuxMintターミナル
0x03a0008e 0 user-LinuxMint Mozilla Firefox


「DESK」は数字でなければならないので、私はgrep “workspace name” | cut -d" " -f1それを取得するために使用します。

たとえば、Firefoxをワークスペース「コード」に移動する場合は、次のように使用できます。

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.