[Ubuntu] Przenoszenie aktywnych okien między dwoma monitorami za pomocą skrótów klawiszowych
Ostatnio kolega zapytał mnie czy da radę przenosić aktywne okna za pomocą skrótu klawiszowego między dwoma ekranami w systemie Ubuntu z Gnomem 2, albowiem często z takiej funkcjonalności chciałby korzystać. Z tego co wiedziałem to w "prosty" sposób nie dało się tego zrobić, ale dla chcącego nic trudnego! Poszperałem trochę i znalazłem sposób.
Z pomocą przychodzi nam pakiet xdotool (command-line X11 automation tool ), za którego pomocą można wydawać polecenia jakby przychodziły z przycisków myszki, czy klawiatury, a także możliwość zarządzania oknami - co dla mnie było strzałem w dziesiątkę.
Pierwsze co, to zainstalowałem omawiany pakiet, a że korzystam z Ubuntu to wykonałem następujące polecenie:
sudo apt-get install xdotool
Po instalacji sprawdziłem moje ustawienia X11 w pliku /etc/X11/xorg.conf, gdzie odczytałem pozycję x,y górnego-lewego rogu moich dwóch monitorów: pierwszy ekran to oczywiście pozycja 0, 0, zaś drugi monitor to 1920, 0 - wszystko jest zależne od rozdzielczości danych monitorów i kolejność ich podłączenia.
Do napisania skryptu użyłem dwóch komend:
- getwindowfocus, aby uzyskać unikalne id aktywnego okna, które chcę przenieść na sąsiedni ekran
- windowmove, aby przesunąć aktywne okno na podaną pozycję
Cały skrypt wygląda trywialnie:
#!/bin/bash if [ $1 -eq 2 ] then POZYCJA="0 0" else POZYCJA="1920 0" fi /usr/bin/xdotool windowmove $(/usr/bin/xdotool getwindowfocus) $POZYCJA exit 0
Skrypt zapisałem w pliku, który umieściłem w swoim katalogu użytkownika i nadałem jemu odpowiednie prawa (chmod +x). Dalej uruchomiłem ustawienia skrótów klawiszowych (gnome-keybinding-properties), w którym utworzyłem dwa dodatkowe wpisy, które wywołują skrypt z parametrem:
- skrypt.sh 1 - monitor przełączenie aktywnego okna na monitor 1
- skrypt.sh 2 - przełączenia na ekran 2.
Takie rozwiązanie wystarczyło mojemu kumplowi i mam nadzieję, że niektórym z Was także się ono przyda ;)
Zawsze możemy się pokusić o usprawnienie skryptu np. o dopasowanie rozmiaru przenoszonego okienka, kiedy nie jest zmaksymalizowane, ale to już zostawiam Wam...