XFCE - キーストロークでウィンドウを別のモニタに送信する

XFCE - キーストロークでウィンドウを別のモニタに送信する

デュアルモニター設定を使用してXubuntu 11.10を実行しています。選択したウィンドウを次のモニターに送信できるキーストローク(おそらくCTRL+キーストローク)を作成しようとしています。ALTSPACE

swapmonitorGNOMEには、ウィンドウを別のモニタに送信できるWindowというパッケージがあります。キーストロークでプログラムを呼び出しても同じ効果が得られます。

XFCE/Xubuntu では、これはどのように行われますか?

答え1

これはしばらく前に投稿されており、すでに答えを得ていると確信しています。しかし、まだ答えを得ていない人のために。

次のコマンドを実行してください

sudo apt-get install xdotool
sudo apt-get install wmctrl

次に、次のリンクからbashスクリプトをダウンロードします(jc00ke提供)。 https://github.com/jc00ke/move-to-next-monitor

個人的には、ルートディレクトリにはすべてのプライベートスクリプトを保存するディレクトリがあります。ただし、ダウンロード場所は完全にあなた次第です。実行できる権限を持つように変更します。たとえば、スクリプトを move-to-next-monitor.sh として保存し、次のコマンドを実行します。

chmod 755 move-to-next-monitor.sh
  1. 設定マネージャ - >キーボード - >アプリショートカット
  2. 追加するにはクリックしてください。
  3. [開く]をクリックしてスクリプトに移動します。
  4. キーボードショートカットを指定すればチャジャン!

これで、キーボードショートカットを使用してウィンドウをある画面から別の画面に切り替えることができます。 2つ以上の画面でどのように機能するのかわかりません。

答え2

もともとjc00keによって書かれた上記のスクリプトをいくつか変更しました。

  • 私のモニターは3つに設定されています。
  • ウィンドウが最大化されたかどうかを維持します。
  • script-name -l用途と用途に応じて、script-name -rウィンドウを左右に移動するために使用されます。
  • モニターが2つの場合script-name -a
  • Chromiumアプリが最小化されたときに非常に小さく、新しいモニターで再び最大化されない修正を追加しました。
    jc00keと通信中です。これはXfceではうまく機能しますが、Unityのスクリプトに問題があると言います。もちろん、Unityなどの他のデスクトップ環境では、これらのオプションはウィンドウマネージャに組み込まれているため、このスクリプトは必要ありません。
    スクリプトを使用するには、スクリプトを実行可能にし、次の2つのchmod +x script-nameプログラムですsudo apt install xdotool wmctrl
#!/bin/bash
#
# Move the current window to the next monitor.
#
# Also works only on one X screen (which is the most common case).
#
# Props to
# http://icyrock.com/blog/2012/05/xubuntu-moving-windows-between-monitors/
#
# Unfortunately, both "xdotool getwindowgeometry --shell $window_id" and
# checking "-geometry" of "xwininfo -id $window_id" are not sufficient, as
# the first command does not respect panel/decoration offsets and the second
# will sometimes give a "-0-0" geometry. This is why we resort to "xwininfo".

screen_width=$(xdpyinfo | awk -F" |x" '/dimensions:/ { print $7 }')
screen_height=$(xdpyinfo | awk -F" |x" '/dimensions:/ { print $8 }')
window_id=$(xdotool getactivewindow)

case $1 in
    -l )
        display_width=$((screen_width / 3 * 2))
        ;;
    -r )
        display_width=$((screen_width / 3))
        ;;
    -a )
        display_width=$((screen_width / 2))
        ;;
esac

# Remember if it was maximized.
window_state=$(xprop -id $window_id _NET_WM_STATE | awk '{ print $3 }')

# Un-maximize current window so that we can move it
wmctrl -ir $window_id -b remove,maximized_vert,maximized_horz

# Read window position
x=$(xwininfo -id $window_id | awk '/Absolute upper-left X:/ { print $4 }')
y=$(xwininfo -id $window_id | awk '/Absolute upper-left Y:/ { print $4 }')

# Subtract any offsets caused by window decorations and panels
x_offset=$(xwininfo -id $window_id | awk '/Relative upper-left X:/ { print $4 }')
y_offset=$(xwininfo -id $window_id | awk '/Relative upper-left Y:/ { print $4 }')
x=$((x - x_offset))
y=$((y - y_offset))

# Fix Chromium app view issue of small un-maximized size
width=$(xdotool getwindowgeometry $window_id | awk -F" |x" '/Geometry:/ { print $4 }')
if [ "$width" -lt "150" ]; then
  display_width=$((display_width + 150))
fi

# Compute new X position
new_x=$((x + display_width))
# Compute new Y position
new_y=$((y + screen_height))

# If we would move off the right-most monitor, we set it to the left one.
# We also respect the window's width here: moving a window off more than half its width won't happen.
if [ $((new_x + width / 2)) -gt $screen_width ]; then
  new_x=$((new_x - screen_width))
fi

height=$(xdotool getwindowgeometry $window_id | awk -F" |x" '/Geometry:/ { print $5 }')
if [ $((new_y + height / 2)) -gt $screen_height ]; then
  new_y=$((new_y - screen_height))
fi

# Don't move off the left side.
if [ $new_x -lt 0 ]; then
  new_x=0
fi

# Don't move off the bottom
if [ $new_y -lt 0 ]; then
  new_y=0
fi

# Move the window
xdotool windowmove $window_id $new_x $new_y

# Maintain if window was maximized or not
if [[ "${window_state}" == _NET_WM_STATE_MAXIMIZED* ]]; then
    wmctrl -ir $window_id -b add,maximized_vert,maximized_horz
fi

答え3

また、モニタ間でウィンドウを移動するための独自のPythonスクリプトを作成しました。

https://github.com/calandoa/movescreen

使用法:

movescreen.py <up|down|left|right>

興味深い機能:

  • 4方向処​​理
  • 複数のモニターにウィンドウが重なるなど特殊な場合の処理
  • 独立した回復フルスクリーンレベルの最大化そして垂直状態
  • Pythonを使用して簡単にデバッグしたり、新機能を追加したりできます。

答え4

別の選択肢は、「バイナリ」の依存関係(xdotoolやwmctrlなど)に依存しません。https://github.com/AlexisBRENON/ewmh_m2m

  • pip(手動でコピーしたり、実行可能にするなどの作業なしで)インストールできます。
  • さまざまなレイアウト(水平、垂直、混合)の複数の画面を処理します。
  • 異なるサイズの画面間を移動したときにウィンドウ/画面の割合を維持する
  • 最大化された状態の復元(水平、垂直)

タイプ。

関連情報