XFCE - ส่งหน้าต่างไปยังจอภาพอื่นบนการกดแป้น


27

ฉันใช้ Xubuntu 11.10 ด้วยการตั้งค่าจอภาพสองจอ ฉันต้องการสร้างการกดแป้น (อาจจะCTRL+ ALT+ SPACEซึ่งจะอนุญาตให้ฉันส่งหน้าต่างที่เลือกไปยังจอภาพถัดไป

ใน GNOME มีแพ็คเกจที่เรียกว่าswapmonitorซึ่งสามารถส่งหน้าต่างไปยังจอภาพอื่นได้ การเรียกโปรแกรมนี้ด้วยการกดแป้นนั้นให้ผลเหมือนกัน

วิธีนี้ทำได้ใน XFCE / Xubuntu


คุณไม่มีสิทธิ์เข้าถึงswapmonitorภายใต้ Xubuntu หรือไม่ หรือคุณถามวิธีตั้งค่าแป้นพิมพ์ลัดให้?
ire_and_curses

ดูเหมือนว่าจะใช้งานไม่ได้กับ XFCE แม้ว่าฉันอยากจะรู้ว่ามีตัวเลือกอะไรบ้าง
boffin

คุณมีการตั้งค่าจอภาพหลายจอได้อย่างไร? ในฐานะที่เป็นหน้าจอเสมือนขนาดใหญ่หรือแสดง X แยกต่างหาก? คุณใช้ Twinview ของ NVIDIA หรือไม่?
Keith

มันเป็น TwinView ฉันมีการ์ด Nvidia GeForce แบบเก่าที่มีจอภาพ Dell 19 "2 อัน
boffin

คำตอบ:


27

นี่ถูกโพสต์เมื่อไม่นานมานี้และฉันแน่ใจว่าคุณได้รับคำตอบแล้ว แต่สำหรับผู้ที่ยังไม่ได้

เรียกใช้คำสั่งเหล่านี้

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

จากนั้นดาวน์โหลดสคริปต์ทุบตีจากลิงค์ต่อไปนี้ (เครดิตถึง 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. กำหนดแป้นพิมพ์ลัดให้กับมันแล้วคลิก!

ตอนนี้คุณมีแป้นพิมพ์ลัดเพื่อสลับหน้าต่างจาก 1 หน้าจอเป็นอีกหน้าจอหนึ่ง ฉันไม่แน่ใจว่ามันทำงานอย่างไรกับหน้าจอมากกว่า 2 หน้า


สคริปต์ที่เชื่อมโยงมีปัญหานี้สำหรับฉัน: github.com/jc00ke/bin/issues/1
thejoshwolfe

1
ทำงานได้ดีสำหรับฉันจนถึงตอนนี้ด้วย Mint 17.3 และ xfce 4.12, การ์ดแสดงผลชิปเซ็ต ati และจอภาพสามจอ ไม่เห็นปัญหามากที่สุดของ thejoshwolfe ในระบบของฉัน ขอบคุณสำหรับเคล็ดลับ!
ether_joe

1
@thejoshwolfe ฉันได้เพิ่มเวอร์ชันของสคริปต์ที่แก้ไขปัญหาสูงสุดสำหรับฉัน
jbrock

1
@ether_joe ฉันได้เพิ่มสคริปต์เวอร์ชันที่อาจเป็นประโยชน์กับคุณเนื่องจากคุณมีจอภาพสามจอ
jbrock

ฉันอยู่ใน xfce และสิ่งนี้เป็นความชั่วร้าย มันจะย้ายหน้าต่างจากจอภาพซ้ายไปทางขวาเท่านั้นและทำให้เดสก์ทอปของฉันอยู่ในสถานะที่แปลกประหลาดเพียงครั้งเดียว
Sava B.

10

ฉันได้ทำการเปลี่ยนแปลงบางอย่างกับสคริปต์ที่กล่าวถึงข้างต้นเดิมเขียนโดย jc00ke
- มีการตั้งค่า Mine ไว้สำหรับจอภาพสามจอ
- มันยืนยันว่าหน้าต่างขยายใหญ่สุดหรือไม่
- มันถูกใช้เพื่อย้ายหน้าต่างไปทางซ้ายหรือขวากับการใช้งานscript-name -lและscript-name -rตามลำดับ
- ฉันเพิ่มการแก้ไขที่แอป Chromium เมื่อย่อเล็กสุดและจะไม่เพิ่มขนาดสูงสุดบนหน้าจอใหม่
ฉันสอดคล้องกับ jc00ke ในขณะที่ใช้งานได้ดีกับ Xfce เขาบอกว่าเขามีปัญหากับสคริปต์ของเขาใน Unity แน่นอนว่าสภาพแวดล้อมเดสก์ท็อปอื่น ๆ เช่น Unity จะไม่ต้องการสคริปต์นี้เนื่องจากตัวเลือกดังกล่าวสร้างขึ้นในโปรแกรมจัดการหน้าต่าง
ในการใช้สคริปต์ทำให้สามารถเรียกใช้งานได้chmod +x script-nameและติดตั้งสองโปรแกรมต่อไปนี้, sudo apt-get 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)) ;;
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_HORZ," ]; then
    wmctrl -ir $window_id -b add,maximized_vert,maximized_horz
fi

7

ฉันยังสร้างสคริปต์หลามของตัวเองเพื่อย้ายหน้าต่างไปยังจอภาพ

https://github.com/calandoa/movescreen

การใช้งาน:

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

คุณสมบัติที่น่าสนใจ:

  • จัดการ 4 ทิศทาง
  • จัดการกรณีพิเศษบางอย่างเช่นหน้าต่างซ้อนทับกันบนจอภาพหลายจอ
  • เรียกคืนอิสระเต็มหน้าจอ , ขยายในแนวนอนและแนวตั้งรัฐ
  • การดีบักหรือเพิ่มคุณสมบัติใหม่ง่าย ๆ ด้วย python

1

อีกทางเลือกหนึ่งที่ไม่พึ่งพาการพึ่งพา "ไบนารี" ใด ๆ (เช่น xdotool หรือ wmctrl): https://github.com/AlexisBRENON/ewmh_m2m

  • คุณสามารถติดตั้งได้ด้วยpip(ไม่จำเป็นต้องคัดลอกด้วยตนเองทำให้สามารถใช้งานได้ ฯลฯ )
  • มันจัดการหลายหน้าจอด้วยรูปแบบที่แตกต่างกัน (แนวนอนแนวตั้งผสม)
  • รักษาอัตราส่วนหน้าต่าง / หน้าจอเมื่อเคลื่อนที่ระหว่างหน้าจอที่มีขนาดต่างกัน
  • คืนค่าสถานะที่ขยายให้ใหญ่สุด (แนวนอนแนวตั้ง)

ชนิด.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.