XFCE - Gửi cửa sổ đến màn hình khác trên tổ hợp phím


27

Tôi đang chạy Xubfox 11.10 với thiết lập màn hình kép. Tôi đang tìm cách tạo ra một tổ hợp phím (có thể CTRL+ ALT+ SPACEsẽ cho phép tôi gửi một cửa sổ đã chọn đến màn hình tiếp theo.

Trong Gnome có một gói được gọi swapmonitorlà có khả năng gửi cửa sổ đến màn hình khác. Gọi chương trình này với một tổ hợp phím đạt được hiệu quả tương tự.

Làm thế nào điều này được thực hiện trong XFCE / Xubfox?


Bạn không có quyền truy cập swapmonitordưới Xubfox? Hoặc bạn đang hỏi làm thế nào để thiết lập một phím tắt cho nó?
ire_and_curses

Nó dường như không hoạt động trên XFCE. Mặc dù tôi muốn biết những lựa chọn ngoài kia.
boffin

Làm thế nào để bạn có nhiều màn hình được thiết lập? Là một màn hình ảo lớn, hay màn hình X riêng biệt? Bạn đang sử dụng nvidia Twinview?
Keith

Đó là TwinView. Tôi có thẻ Nvidia GeForce cũ với 2 màn hình Dell 19 "
boffin

Câu trả lời:


27

Điều này đã được đăng cách đây một thời gian và tôi chắc chắn bạn đã nhận được câu trả lời của mình, nhưng đối với những người chưa có.

Chạy các lệnh này

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

Sau đó tải xuống tập lệnh bash từ liên kết sau (ghi có vào jc00ke) https://github.com/jc00ke/move-to-next-monitor

Cá nhân, tôi có một thư mục trong thư mục gốc nơi tôi lưu trữ tất cả các tập lệnh cá nhân của mình. Tuy nhiên, nơi bạn tải xuống nó thực sự là tùy thuộc vào bạn. Thay đổi nó để có quyền để bạn có thể thực thi. Ví dụ: lưu các tập lệnh dưới dạng move-to-next-monitor.sh và sau đó thực hiện các thao tác sau

chmod 755 move-to-next-monitor.sh
  1. trình quản lý cài đặt -> bàn phím -> phím tắt ứng dụng
  2. Nhấp vào Thêm
  3. Nhấp vào Mở và hướng nó đến tập lệnh của bạn
  4. Chỉ định một phím tắt cho nó và voilà!

Bây giờ bạn có một phím tắt để chuyển một cửa sổ từ màn hình này sang màn hình khác. Tôi không chắc nó hoạt động như thế nào với hơn 2 màn hình.


Kịch bản được liên kết có vấn đề này đối với tôi: github.com/jc00ke/bin/issues/1
thejoshwolfe

1
Làm việc ổn với tôi cho đến nay với Mint 17.3 và xfce 4.12, card màn hình chipset ati và ba màn hình. Không thấy vấn đề tối đa hóa của thejoshwolfe trên hệ thống của tôi. Cảm ơn vì những lời khuyên!
ether_joe

1
@thejoshwolfe Tôi đã thêm phiên bản kịch bản của mình để giải quyết vấn đề tối đa hóa cho tôi.
jbrock

1
@ether_joe Tôi đã thêm phiên bản tập lệnh có thể có lợi cho bạn khi bạn có ba màn hình.
jbrock

Tôi đang ở xfce, và điều này là xấu xa. Nó sẽ chỉ di chuyển cửa sổ từ màn hình bên trái sang bên phải và nó đặt máy tính để bàn của tôi ở trạng thái thực sự kỳ lạ một lần.
Sava B.

10

Tôi đã thực hiện một số thay đổi đối với tập lệnh trên được đề cập, ban đầu là tác giả của jc00ke.
- Của tôi được thiết lập cho ba màn hình.
- Nó duy trì cho dù cửa sổ đã được tối đa hóa hay không.
- Nó được sử dụng để di chuyển cửa sổ sang trái hoặc phải với cách sử dụng script-name -lscript-name -rtương ứng.
- Tôi đã thêm một bản sửa lỗi trong đó các ứng dụng Chromium khi được thu nhỏ rất nhỏ và sẽ không tối đa hóa lại trên màn hình mới.
Tôi tương ứng với jc00ke. Trong khi điều này hoạt động rất tốt trên Xfce, anh nói anh có vấn đề với kịch bản của mình trong Unity. Tất nhiên các môi trường máy tính để bàn khác như Unity sẽ không cần tập lệnh này vì các tùy chọn như vậy được tích hợp vào trình quản lý cửa sổ.
Để sử dụng tập lệnh, hãy thực hiện chmod +x script-namevà cài đặt hai chương trình sau đây 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

Tôi cũng đã tạo tập lệnh python của riêng mình để di chuyển các cửa sổ trên màn hình.

https://github.com/calandoa/movecreen

Sử dụng:

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

Các tính năng thú vị:

  • xử lý 4 hướng
  • xử lý một số trường hợp đặc biệt như cửa sổ chồng chéo trên một số màn hình
  • khôi phục độc lập toàn màn hình , tối đa hóa các trạng thái theo chiều ngangchiều dọc
  • gỡ lỗi hoặc thêm các tính năng mới dễ dàng với python.

1

Một lựa chọn khác không phụ thuộc vào bất kỳ phụ thuộc "nhị phân" nào (như xdotool hoặc wmctrl): https://github.com/AlexisBRENON/ewmh_m2m

  • Bạn có thể cài đặt nó với pip(không cần phải sao chép thủ công, làm cho nó có thể thực thi được, v.v.)
  • Nó xử lý nhiều màn hình với các bố cục khác nhau (ngang, dọc, hỗn hợp)
  • Giữ tỷ lệ cửa sổ / màn hình khi di chuyển giữa các màn hình có kích thước khác nhau
  • Khôi phục trạng thái tối đa hóa (ngang, dọc)

Loại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.