Jak wykonać skrypt, aby otworzyć zestaw programów każdy w określonym obszarze roboczym?

35

Rozejrzałem się przez chwilę i nie mogłem znaleźć odpowiedzi na mój następujący problem:

Mam zestaw sześciu komputerów stacjonarnych na Ubuntu 12.04 z Unity. Przy uruchamianiu każdego ranka przechodzę przez procedurę otwierania tych samych pięciu lub sześciu programów. Otwieram każdy w określonym obszarze roboczym. Chciałbym mieć to zautomatyzowane. Czy istnieje sposób na skrypt lub skonfigurowanie tego?

Dodatkowe pytanie : Aby jeszcze bardziej skomplikować sprawę, uruchamiam dwa ekrany w trybie podwójnego widoku. Właściwie muszę uruchomić każdy program na określonym ekranie, najlepiej na pełnym ekranie.

Jahn
źródło
1
Może ci się to przydać. Wskazuje na wmctrl, ale go nie użyłem: movingtofreedom.org/2010/08/10/…
RobotHumans
to może być pomocne. askubuntu.com/questions/87002/...
Suhaib,
1
Biorąc to pod uwagę z bardzo prostego widoku, czy jest jakiś powód, dla którego nie możesz pozostawić maszyny w trybie zawieszenia podczas wychodzenia? Myślę, że będzie to dla ciebie szybka poprawka, gdy znajdziesz bardziej trwałe rozwiązanie ...
Adeyfk
Kiedy mówisz „komputer”, masz na myśli przestrzeń roboczą?
p0llard
Działania KDE mogą być w stanie to zrobić.
Ślimak mechaniczny

Odpowiedzi:

20

Pomysł jdp407 dotyczący użycia compizconfig spowoduje powiązanie konkretnej aplikacji z określonym obszarem roboczym, dzięki czemu KAŻDY RAZ ten program zostanie otwarty, zostanie umieszczony w odpowiednim obszarze roboczym. Jeśli nie jest to pożądane, możesz wykonać następujące czynności:

1) Zainstaluj wmctrl

sudo apt-get install wmctrl

2) Utwórz plik o następującej treści i ustaw go jako wykonywalny

#!/bin/bash
wmctrl -s 0 #Switches to workspace 0 [workspaces are numbered from 0]
gnome-terminal & #Say you want a terminal in the 0th workspace
nautilus & #Maybe a file browser too
sleep 2 #Windows take some time to open. If you switch immediately, they'll open up in wrong workspaces. May have to change the value 2.
wmctrl -s 1 #Switches to workspace 1
firefox & #You get the idea. Continue for all workspaces
sleep 2
wmctrl -s 0 #You will be left at this workspace when the script finishes executing

3) Wywołaj ten skrypt z .xsessionrckatalogu domowego [jeśli będziesz musiał utworzyć ten plik], aby zautomatyzować proces przy każdym logowaniu. Lub możesz po prostu zadzwonić z terminala, jeśli to konieczne. EDYCJA: Umieść go w „Aplikacjach startowych”, a nie .xsessionrc. .xsessionrc uruchomi się jeszcze przed zakończeniem ładowania środowiska pulpitu.


Możesz utworzyć niestandardową wersję xsession, jak sugeruje jdp407, aby mieć dwie sesje do wyboru, jedną, która automatycznie otwiera te aplikacje, a drugą nie. Ale wydaje mi się to niepotrzebne.


Jeśli uważasz, że przejście do obszaru roboczego, otwarcie odpowiednich aplikacji, a następnie przejście do następnego jest czasochłonne, możesz otworzyć wszystkie aplikacje za jednym razem, a następnie przenieść okna za pomocą wmctrl. Na przykład

wmctrl -r 'Firefox' -t 1

przeniesie okno z Firefoksem w tytule do obszaru roboczego 1. Jeśli istnieje więcej niż jedno okno, pierwsze na liście zarządzanych okien wmctrlzostanie przeniesione. Aby go użyć, musisz znać tytuł okien, które zostaną utworzone przez aplikacje. Dlatego nie zasugerowałem tego jako podstawowej opcji. Jeśli tytuły będą jednoznaczne, jak ma to miejsce w przypadku najczęściej używanych aplikacji, jest to właściwy sposób.


Otwieranie aplikacji na pełnym ekranie:

Niektóre aplikacje, takie jak gnome-terminal, mają argumenty wiersza poleceń, aby otworzyć okno w stanie zmaksymalizowanym lub w trybie pełnoekranowym. Jeśli takie opcje istnieją, skorzystaj z nich. W przeciwnym razie zastosuj wmctrlw następujący sposób

wmctrl -r 'prasanth@nb37' -b add,maximized_vert,maximized_horz

Maksymalizuje to moje (już istniejące) okno terminala.

wmctrl -r 'prasanth@nb37' -b add,fullscreen

Spowoduje to przejście okna do trybu pełnoekranowego.


Przejdź do wmctrlstrony podręcznika użytkownika. Możesz znaleźć zastosowanie dla większej jego funkcjonalności.

S Prasanth
źródło
1
Najwyraźniej użycie wmctrl do wybrania obszaru roboczego nie działa w dystrybucjach post-Lynx. Opcja „-s” może być ustawiona tylko na „0”, w przeciwnym razie wygeneruje błąd lub nic nie zrobi. Źródło: movingtofreedom.org/2010/08/10/…
p0llard
Używam 12.04 z unity2d (bez efektów wizualnych) i działa dla mnie. Wygląda na to, że nie będzie działać z włączonymi efektami wizualnymi.
S Prasanth
wmctrldziała tutaj dobrze (LXDE i XFCE, komponowanie za pomocą xcompgr włączone)
Glutanimate
Działa dla mnie w Mennicy 14 z Cynamonem, dzięki!
k102
W Ubuntu 14.04 użyj, wmctrl -o X,Yaby przejść do określonej rzutni. Jeśli masz wiele monitorów, możesz przenosić aplikacje na inny monitor za pomocą wmctrl -r "App name" -e G,X,Y,W,H. Działa dobrze z efektami wizualnymi jedności.
Nate
10

Są tutaj dwa „problemy”: pierwszy polega na otwarciu określonego zestawu programów podczas logowania; drugi polega na otwarciu ich w określonych obszarach roboczych. Oba zajmę się osobno:

  1. Tworzenie niestandardowej sesji X.

    Jest to dość łatwe do zrobienia. Musisz po prostu utworzyć skrypt sesji X, a następnie powiedzieć LightDM, aby go użył. Musisz znać polecenia, aby uruchamiać żądane programy z terminala.

    1. Otwórz terminal.
    2. Wpisz touch ~/.customxsessioni naciśnij klawisz Enter.
    3. Wpisz gedit ~/.customxsessioni naciśnij klawisz Enter.
    4. Teraz będziesz mieć otwarty edytor tekstu z pustym plikiem.
    5. Musisz zdefiniować sesję X w tym pliku. Utworzyłem przykładowy plik „wypełnij puste pola” u dołu odpowiedzi. Myślę, że Ubuntu używa sesji gnome jako menedżera okien, ale prawdopodobnie się mylę. Nie mogę go obecnie przetestować (uszkodzony laptop), więc jeśli nie działa zgodnie z oczekiwaniami (np. Ładuje Gnome zamiast Unity), być może będziesz musiał przeprowadzić badania.
    6. Zapisz plik i zamknij Gedit.
    7. Rodzaj touch /usr/share/xsessions/multi.desktopi naciśnij klawisz Enter.
    8. Rodzaj gedit /usr/share/xsessions/multi.desktopi naciśnij klawisz Enter.
    9. Teraz będziesz mieć otwarty edytor tekstu z pustym plikiem.
    10. Skopiuj i wklej kod na dole odpowiedzi (oznaczony „/usr/share/xsessions/multi.desktop:”) do Gedit.
    11. Zapisz plik i zamknij Gedit.
    12. Restart. Gdy przejdziesz do ekranu logowania, jeśli spojrzysz na dostępne sesje (kliknij małe logo Ubuntu obok nazwy użytkownika), powinieneś zobaczyć jedną o nazwie Multi-Session. Jeśli się zalogujesz, programy, które umieścisz w X Session Script, powinny się otworzyć automatycznie.
  2. Przypisywanie programów do obszarów roboczych

    Jest to również dość łatwe, ale wymaga dodatkowego oprogramowania, które nie jest domyślnie instalowane w Ubuntu.

    1. Zainstaluj compizconfig-settings-manager (możesz użyć Centrum oprogramowania lub po prostu uruchomić sudo apt-get install compizconfig-settings-manager w Terminalu).
    2. Otwórz Ustawienia CompizConfig w Dash.
    3. Otwórz wtyczkę „Umieść Windows” (znajduje się w sekcji „Zarządzanie oknami”).
    4. Kliknij „Nowy” w sekcji „Windows ze stałą rzutnią”.
    5. Kliknij ikonę „Plus”.
    6. Ustaw „Typ” jako „Tytuł okna” i wpisz tytuł okna jednego z programów w polu „Wartość”. Upewnij się, że „Relacja” jest ustawione na „ORAZ”, i kliknij „Dodaj”.
    7. Ustaw obszar roboczy, wprowadzając liczby w polach „X” i „Y”. Gdy masz 4 obszary robocze dla „X”, „1” jest lewy, a „2” jest prawy, a dla „Y” „1” jest górny, a „2” jest dolny. Ponieważ masz 6 obszarów roboczych, w zależności od konfiguracji, ustawienie „Y” na „3” spowoduje wybranie dolnego rzędu, a ustawienie „X” na „3” spowoduje wybranie trzeciej kolumny.
    8. Powtórz kroki 4–7 dla pozostałych programów, do których chcesz przypisać obszar roboczy.
    9. Zamknij Ustawienia CompizConfig.
  3. Logowanie

    Po zalogowaniu musisz poinformować Ubuntu, że chcesz użyć niestandardowej sesji X.

    1. Restart.
    2. Gdy przejdziesz do ekranu logowania, jeśli spojrzysz na dostępne sesje (kliknij małe logo Ubuntu obok nazwy użytkownika), powinieneś zobaczyć jedną o nazwie Multi-Session. Jeśli się zalogujesz, programy, które umieścisz w X Session Script, powinny otworzyć się automatycznie i zostać przypisane do wybranych obszarów roboczych.
  4. Problemy

    Całkiem wiele mogło się z tym nie udać, albo popełnisz mały błąd, albo popełniłem błąd, pisząc tę ​​odpowiedź. Jeśli coś pójdzie nie tak, upewnij się, że postępowałeś zgodnie z instrukcjami podanymi na liście, a jeśli nie, popraw wszystko. Jeśli nadal masz problem, zostaw komentarz.

~ / .customxsession:

#!/usr/bin/env bash
program-command-1 &
program-command-2 &
program-command-3 &
program-command-4 &
program-command-5 &
program-command-6 &
exec gnome-session

/usr/share/xsessions/multi.desktop:

[Desktop Entry]
Name=Multi-Session
Exec=/home/your-username/.customxsession
p0llard
źródło
1

Dodaj wymagane aplikacje do programu StarupApplications, a następnie dodaj również ten skrypt. To jest mój skrypt: ManageWorkSpaces.sh

echo "Jeril"
wmctrl -r NetBeans IDE 7.1.1 -t 0
wmctrl -r /bin/bash -t 1
wmctrl -r Google Chrome -t 2
wmctrl -r jerilkuruvila - Skype™ -t 3

// skup się na terminalu

wmctrl -a NetBeans IDE 7.1.1   -t 0 

Ale nie mam pojęcia o obsłudze 2 wyświetlaczy.

jkuruvila
źródło
Cześć Jeril! Witamy w Ask Ubuntu! Twoje rozwiązanie nie działa dla mnie. Jeśli uruchomię wmctrl -d, mam tylko jeden „pulpit”. Czy przetestowałeś to na Unity w Ubuntu 12.10?
Flimm
Cześć Flimm, używam wmctrl -r, mam 4 przestrzenie robocze. Moja wersja Ubuntu to 12.04
jkuruvila