Tak więc mam 8 wirtualnych komputerów stacjonarnych w Unity (z Compiz), ponieważ mam wiele projektów, nad którymi pracuję jednocześnie.
Problem w tym, że za każdym razem, gdy muszę ponownie uruchomić lub przypadkowo zamknąć Chrome (który stanowi dużą część okien potrzebnych mi do pracy), muszę ręcznie otworzyć te okna ponownie, a następnie je skonfigurować (otworzyć pliki, przejść do właściwego adresy URL itp.).
Jak poszedłbyś pisać scenariusz, który zrobi to wszystko dla mnie? To znaczy: 1) Otwórz okna 2) Umieść je we właściwych współrzędnych na właściwych ekranach wirtualnych
(1) jest oczywiste, w Google Chrome wystarczy uruchomić „google-chrome”. Ale jak to umieścić we właściwym miejscu? (2)
A może istnieje już skrypt / oprogramowanie, które zrobiłoby to dla mnie?
wmctrl
, podobnie jak oprogramowanie do sterowania oknami za pomocą skryptu lub terminala. Ale jeśli chodzi o ponowne uruchomienie okna, może to być nieco większe wyzwanieOdpowiedzi:
Można to zrobić bardzo dobrze, ale potrzebujesz trochę zrozumienia w Unity / rzutniach. Mam nadzieję, że poniższa historia jest zrozumiała, jeśli nie, proszę zostawić komentarz.
Poniższego skryptu można użyć do otwarcia okna dowolnej aplikacji w dowolnej z twoich rzutni, w dowolnej pozycji, jeśli uruchomisz ją z właściwymi argumentami. Skrypt jest edytowanej wersji tego jednego , ale teraz przygotowany do wstawiania okien na trwającej wirtualnym pulpicie .
1. Zrozumienie rzutni i współrzędnych okna
Obszary robocze w jedności
W Unity, w przeciwieństwie do innych menedżerów okien, w rzeczywistości masz tylko jeden obejmujący obszar roboczy, który jest podzielony na rzutnie. W twoim przypadku twój obszar roboczy jest podzielony na osiem rzutni.
Jak definiowane jest położenie okien
Pozycja okna, jako wynik polecenia:
jest opisany jako pozycja względem lewego górnego rogu bieżącej rzutni :
Więc jeśli jesteś w rzutni
1
:okno w rzutni 2, które można ustawić na np. 1700 (x-wise) x 500 (y-wise)
(mój ekran to 1680x1050)
Jeśli jednak masz rzutnię 6:
to samo okno będzie ustawione na 20 (x), -550 (y)
Prawidłowe użycie tych współrzędnych jest ważne, aby uruchomić skrypt z właściwymi argumentami, jak opisano poniżej:
2. Jak korzystać ze skryptu
Poniższego skryptu można użyć do umieszczenia nowego okna aplikacji w wirtualnym (obejmującym) obszarze roboczym.
Upewnij się, że
wmctrl
jest zainstalowany:Skopiuj poniższy skrypt do pustego pliku, zapisz go jako
setwindow
(bez rozszerzenia) w~/bin
. Utwórz katalog, jeśli jeszcze nie istnieje. Spraw, aby skrypt był wykonywalny .~/bin
, uruchom poleceniesource ~/.profile
lub wyloguj się / zaloguj, aby udostępnić katalog w$PATH
.Uruchom testowo polecenie:
na przykład
Okno gedit powinno pojawić się w bieżącej rzutni.
Uwagi:
gedit
okna w moim systemie to np. Ok. 470 pikseli.<x_position>
aby umieścić okna po lewej stronie bieżących rzutni<y_position>
aby umieścić okna nad bieżącymi rzutniamiAby otworzyć nowe okna jednocześnie w różnych rzutniach, możesz po prostu połączyć polecenia. Patrząc na ustawienia rzutni w przykładzie „Długa historia”: Jeśli korzystam z rzutni 1, mogę otworzyć okna gedit w rzutniach 1, 2, 3 i 4 za pomocą polecenia:
Scenariusz
EDYCJA: leniwa wersja
Jeśli wolisz po prostu wprowadzić współrzędne i rozmiar, po prostu jakbyś otworzył okno w bieżącej rzutni i podał docelową rzutnię jako argument (bez konieczności obliczania), skorzystaj z poniższej wersji ...
Jeśli skonfigurujesz go jak pierwszą wersję skryptu, możesz uruchomić go za pomocą polecenia:
Przykład: aby otworzyć
Google-Chrome
okno ustawione na20, 20
, rozmiar300x300
, w rzutni5
:Konfiguracja jest prawie taka sama jak pierwsza wersja skryptu.
Zauważ, że również ten skrypt działa poprawnie tylko wtedy, gdy zdefiniowane okno (pozycja / rozmiar) całkowicie pasuje do docelowej rzutni.
Scenariusz:
Otwieranie okien aplikacji za pomocą argumentów
Aby zakończyć zadanie, całkowicie odpowiedz na pytanie:
Jeśli uruchomisz skrypt jako np .:
otworzy domyślne okno na docelowych komputerach.
Jednak w najnowszej wersji skryptu możesz dodać dodatkowy argument, aby otworzyć okno aplikacji, na przykład
url
:na przykład:
Jeśli (dodatkowy) argument zawiera spacje, użyj cudzysłowów. Powyższy przykład otworzy
google-chrome
okno w rzutni 3, otwierającurl
http://askubuntu.com
.Możesz połączyć polecenia, aby otworzyć wiele okien / adresów URL w różnych obszarach roboczych w jednym poleceniu, np .:
źródło
Rozszerza to świetną odpowiedź @Jacob Vlijim powyżej z nieco zmodyfikowanym
setwindow
skryptem:Opis zmian:
python3
dopython
(tylko osobiste preferencje)sys.argv
abyargparse
za pomocą interfejsu linii komend lepiejwhile
pętla 0,5 s do 1 pełnego sekundy czasu snuxrandr
zależnościUWAGA: Jest to tylko nieco ulepszona wersja, którą napisałem do użytku osobistego na Debian Jessie LXDE. Twoje wyniki mogą się różnić.
źródło
Dla zainteresowanych wdrożyłem Desktopen: github.com/snitko/desktopen
Pozwala napisać skrypt do otwierania okien w różnych rzutniach i ekranach w bardzo przyjazny sposób.
źródło