XFCE - Kirim jendela ke monitor lain dengan penekanan tombol

27

Saya menjalankan Xubuntu 11.10 dengan pengaturan dua monitor. Saya mencari untuk membuat keystroke (mungkin CTRL+ ALT+ SPACEyang akan memungkinkan saya mengirim jendela yang dipilih ke monitor berikutnya.

Di GNOME ada paket yang disebut swapmonitoryang mampu mengirim jendela ke monitor lain. Memanggil program ini dengan ketukan mencapai efek yang sama.

Bagaimana ini dilakukan di XFCE / Xubuntu?

sarjana
sumber
Apakah Anda tidak memiliki akses ke swapmonitorbawah Xubuntu? Atau apakah Anda bertanya cara mengatur pintasan keyboard untuk itu?
ire_and_curses
Tampaknya tidak berfungsi di XFCE. Meskipun saya ingin tahu opsi apa yang ada di luar sana.
boffin
Bagaimana Anda mengatur beberapa monitor? Sebagai layar virtual besar, atau pisahkan tampilan X? Apakah Anda menggunakan nvidia twinview?
Keith
Ini adalah TwinView. Saya memiliki kartu Nvidia GeForce lama dengan 2 monitor Dell 19 "
boffin

Jawaban:

27

Ini telah diposting beberapa waktu lalu dan saya yakin Anda sudah mendapatkan jawaban Anda, tetapi bagi mereka yang belum.

Jalankan perintah ini

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

Kemudian unduh skrip bash dari tautan berikut (kredit ke jc00ke) https://github.com/jc00ke/move-to-next-monitor

Secara pribadi, saya memiliki direktori di root saya di mana saya menyimpan semua skrip pribadi saya. Namun, tempat Anda mengunduhnya benar-benar terserah Anda. Ubah untuk memiliki izin agar Anda dapat menjalankan. Misalnya, simpan skrip sebagai move-to-next-monitor.sh dan kemudian jalankan yang berikut ini

chmod 755 move-to-next-monitor.sh
  1. manajer pengaturan -> keyboard -> pintasan aplikasi
  2. Klik Tambah
  3. Klik Buka dan arahkan ke skrip Anda
  4. Tetapkan pintasan keyboard untuk itu dan voila!

Anda sekarang memiliki pintasan keyboard untuk mengganti jendela dari 1 layar ke layar lainnya. Saya tidak yakin cara kerjanya dengan lebih dari 2 layar.

itzjustricky
sumber
Skrip yang ditautkan memiliki masalah ini untuk saya: github.com/jc00ke/bin/issues/1
thejoshwolfe
1
Sejauh ini bekerja dengan baik untuk saya dengan Mint 17.3 dan xfce 4.12, kartu video chipset ati dan tiga monitor. Tidak melihat masalah memaksimalkan the joshwolfe di sistem saya. Terima kasih atas tipsnya!
ether_joe
1
@ thejoshwolfe Saya telah menambahkan versi skrip saya yang memecahkan masalah memaksimalkan bagi saya.
jbrock
1
@ether_joe Saya telah menambahkan versi naskah saya yang mungkin bermanfaat bagi Anda karena Anda memiliki tiga monitor.
jbrock
Saya di xfce, dan hal ini jahat. Ini hanya akan memindahkan jendela dari monitor kiri ke kanan, dan itu menempatkan desktop saya dalam keadaan yang sangat aneh sekali.
Sava B.
10

Saya telah membuat beberapa perubahan pada skrip di atas yang disebutkan, awalnya ditulis oleh jc00ke.
- Milik saya diatur untuk tiga monitor.
- Mempertahankan apakah jendela dimaksimalkan atau tidak.
- Digunakan untuk memindahkan jendela ke kiri atau ke kanan dengan penggunaan script-name -ldan script-name -rmasing - masing.
- Saya menambahkan perbaikan di mana aplikasi Chromium ketika diperkecil sangat kecil dan tidak akan memaksimalkan lagi pada monitor baru.
Saya berkorespondensi dengan jc00ke. Meskipun ini bekerja dengan baik pada Xfce, dia mengatakan dia memiliki masalah dengan skripnya di Unity. Tentu saja lingkungan desktop lain seperti Unity tidak akan memerlukan skrip ini karena opsi tersebut dibangun untuk manajer jendela.
Untuk menggunakan skrip membuatnya dapat dieksekusi chmod +x script-namedan menginstal dua program berikut 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
jbrock
sumber
7

Saya juga membuat skrip python saya sendiri untuk memindahkan windows melintasi monitor.

https://github.com/calandoa/movescreen

Pemakaian:

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

Fitur menarik:

  • menangani 4 arah
  • menangani beberapa kasus khusus seperti jendela yang tumpang tindih pada beberapa monitor
  • mengembalikan layar penuh secara mandiri , dimaksimalkan keadaan horizontal dan vertikal
  • debugging atau menambahkan fitur baru dengan mudah dengan python.
calandoa
sumber
1

Alternatif lain yang tidak bergantung pada ketergantungan "biner" (seperti xdotool atau wmctrl): https://github.com/AlexisBRENON/ewmh_m2m

  • Anda dapat menginstalnya dengan pip(tidak perlu menyalinnya secara manual, membuatnya dapat dieksekusi, dll.)
  • Ini menangani beberapa layar dengan tata letak yang berbeda (horisontal, vertikal, campuran)
  • Pertahankan rasio jendela / layar saat bergerak di antara layar dengan ukuran berbeda
  • Kembalikan keadaan maksimal (horizontal, vertikal)

Jenis.

AlexisBRENON
sumber