XFCE - Надіслати вікно іншому монітору під час натискання клавіші


27

У мене працює Xubuntu 11.10 з подвійною установкою монітора. Я хочу створити натискання клавіші (можливо, CTRL+ ALT+, SPACEщо дозволить мені надіслати вибране вікно на наступний монітор.

У GNOME є пакет, swapmonitorякий називається, який здатний пересилати вікно на інший монітор. Виклик цієї програми натисканням клавіші досягає того ж ефекту.

Як це робиться в XFCE / Xubuntu?


У вас немає доступу до swapmonitorXubuntu? Або ви запитуєте, як встановити для неї комбінацію клавіш?
ire_and_curses

Здається, це не працює на XFCE. Хоча я хотів би знати, які варіанти є там.
бича

Як у вас встановлено кілька моніторів? Як великий віртуальний екран, або окремі екрани X? Ви використовуєте nvidia twinview?
Кіт

Це TwinView. У мене є стара карта Nvidia GeForce з 2-ю моніторами Dell 19 "
boffin

Відповіді:


27

Це було опубліковано деякий час тому, і я впевнений, що ви вже отримали свою відповідь, але для тих, хто цього не зробив.

Виконайте ці команди

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. Призначте для неї комбінацію клавіш і voilà!

Тепер у вас є комбінація клавіш для переключення вікна з одного екрана на інший. Я не впевнений, як це працює з більш ніж 2 екранами.


Зв'язаний сценарій мав цю проблему для мене: github.com/jc00ke/bin/isissue/1
thejoshwolfe

1
Поки що для мене добре працює з Mint 17.3 та xfce 4.12, відеокартами з чіпсетом ati та трьома моніторами. Не бачачи максимальної проблеми в jojowwolfe у моїй системі. Дякуємо за поради!
ether_joe

1
@thejoshwolfe Я додав свою версію сценарію, яка вирішує для мене максимальну проблему.
jbrock

1
@ether_joe Я додав свою версію сценарію, яка може вам принести користь, якщо у вас є три монітори.
jbrock

Я в xfce, і ця річ зла. Він лише перемістить вікно з лівого монітора вправо, і моє робочий стіл поставить один раз в дійсно дивний стан.
Сава Б.

10

Я вніс деякі зміни до згаданого вище сценарію, спочатку автор jc00ke.
- Шахта встановлена ​​на три монітори.
- Він підтримує, чи було вікно максимальним чи ні.
- Застосовується для переміщення вікна вліво або вправо із використанням 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

Я також створив власний сценарій python для переміщення вікон на моніторах.

https://github.com/calandoa/movescreen

Використання:

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

Цікаві особливості:

  • обробляти 4 напрямки
  • обробляти деякі особливі випадки, такі як вікна, що перекриваються на декількох моніторах
  • відновити незалежно один від одного повноекранному , максимізує по горизонталі і по вертикалі стану
  • налагодження чи додавання нових функцій легко за допомогою python.

1

Інша альтернатива, яка не покладається на будь-яку "бінарну" залежність (наприклад, xdotool або wmctrl): https://github.com/AlexisBRENON/ewmh_m2m

  • Ви можете встановити його за допомогою pip(не потрібно копіювати його вручну, робити його виконуваним тощо)
  • Він обробляє кілька екранів з різними макетами (горизонтальні, вертикальні, змішані)
  • Зберігайте співвідношення вікон / екранів під час переміщення між екранами різного розміру
  • Відновлення максимізованих станів (горизонтальних, вертикальних)

Добрий.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.