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

원래 jc00ke가 작성한 위에 언급된 스크립트를 일부 변경했습니다.

  • 내 모니터는 3개로 설정되어 있습니다.
  • 창이 최대화되었는지 여부를 유지합니다.
  • script-name -l용도 와 용도 에 따라 script-name -r창을 왼쪽이나 오른쪽으로 각각 이동하는 데 사용됩니다.
  • 모니터가 2개라면 script-name -a.
  • Chromium 앱이 최소화되었을 때 매우 작았고 새 모니터에서 다시 최대화되지 않는 수정 사항을 추가했습니다.
    jc00ke와 통신 중입니다. 이는 Xfce에서는 훌륭하게 작동하지만 Unity의 스크립트에는 문제가 있다고 말합니다. 물론 Unity와 같은 다른 데스크탑 환경에서는 이러한 옵션이 창 관리자에 내장되어 있으므로 이 스크립트가 필요하지 않습니다.
    스크립트를 사용하려면 스크립트를 실행 가능하게 만들고 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(수동으로 복사하거나 실행 가능하게 만드는 등의 작업 없이) 설치할 수 있습니다 .
  • 다양한 레이아웃(가로, 세로, 혼합)의 여러 화면을 처리합니다.
  • 크기가 다른 화면 간 이동 시 창/화면 비율 유지
  • 최대화된 상태 복원(가로, 세로)

유형.

관련 정보