Linux: Przenoszenie okien na inne pulpity

Witam.
Niedawno miałem problem z ciekawym kalendarzem jakim jest rainlendar2.
Standardowo okna pokazywane są na wszystkich pulpitach, jednak bez problemu możemy to zmienić w oknie ustawień.
Sęk w tym, że program uruchamiany jest na aktualnym pulpicie, czyli przy autostarcie jest to pulpit pierwszy.
Dodatkowo przy trzech oknach programu nie da się posługiwać ich nazwami, potrzebujemy ID ich okien.

Problem rozwiązałem za pomocą programu wmctrl i odpowiedniego skryptu.

#!/bin/bash
################
# konfiguracja #
################
# numer pulpitu, na który chcemy przenieść aplikację
# (pierwszy pulpit ma indeks 0!)
desktop=3;

#nazwa aplikacji
app=rainlendar2;

#uruchamiamy rainlendar jako proces w tle
#( & <- nie czeka na zakończenie procesu, bez tego nie będzie działać)
$app &

pid=`pidof -s $app`;
x=0;

#jesli dlugosc zmiennej x jest mniejsza niz 5
while [ ${#x} -lt 5 ] ; do
    # pobiera aktywne okna zawierajace PID
    x=`wmctrl -lp | grep $pid`
    #czeka sekunde, okno moze jeszcze nie istniec
    sleep 1
done

# pobiera ID okien i zapisuje skrypt do wykonania
wmctrl -lp | awk '$3 == "'$pid'" { print "wmctrl -i -r "  $1  " -t '$desktop'" }' > /tmp/execute.sh

# ustawia prawa dostepu do skryptu wykonanego przez awk
chmod +x /tmp/execute.sh

# wykonuje skrypt
sh /tmp/execute.sh

rm -f /tmp/execute.sh

Konfiguracja:

  • desktop: numer pulpitu, na który chcemy przenieść aplikację.
  • app: nazwa aplikacji do uruchomienia.

Mam nadzieję, że skrypt okaże się pomocny. Sprawdzony na Cinnamonie ale powinien działać również na innych menedżerach okien.

Zapraszam do komentowania!

Comments

comments

Comments

  1. Uruchamianie przeglądarki Opera:
    Wynikowy plik list.txt będący źródłem dla następnego polecenia awk ma przykładowo taką zawartość:

    0x02a00008 0 c2d Odebrane – Opera

    Jak widać, słowo istotne dla rozpoznania programu, tj. „Opera” pojawia się w tym przypadku na 6 pozycji. Ale czasem pojawia się na 4 lub 5. Nie da się przewidzieć na jakiej pozycji będzie, bo to zależy od nazwy strony z jaką Opera się otwiera. A otwiera się np. ze stroną na jakiej została zamknięta lub jeszcze inaczej. Ta nieprzewidywalność pozycji uniemożliwia skuteczne działanie skryptu. Po prostu plik list.txt czasem pozostaje pusty i skrypt przerywa działanie. Gdyby skrypt mógł mieć polecenie typu „jeśli ostatnia pozycja to Opera” lub „jeśli na dowolnej pozycji jest Opera” to by działało 🙂

    1. Piotr Srebniak

      Witam
      Przerobiłem skrypt tak, aby działał również z łańcuchami innymi niż nazwa aplikacji.
      Proszę skopiować skrypt i wkleić do niego konfigurację z dołu postu.
      Zainstalowałem Operę, sprawdziłem – działa:)

      //Edit
      Wymagane jest dowiązanie symboliczne do opery

      sudo ln -s /usr/bin/opera /link/do/opery
      

Leave a Reply

You must be logged in to post a comment.