Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2014-09-02 11:31:13

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?

Teoretycznie zabawa jest prosta.
Odpalam poprzez wine instalator jakiegośtam programu, i automatycznie muszę wybrać domyślne wartości. Zakładam, że tylko jeden winiany program wyświetla cokolwiek na tym displayu.

Aż do wersji wine 1.7.18 było to proste:

Kod:

while true; do
  #wiem że można bez grepów ale historycznie to działa
  id=`xprop -root |fgrep '_NET_ACTIVE_WINDOW(WINDOW)' | awk '{print $5}' | grep 0x`
  if test "$id" != "" ; then
       if xprop -id $id | grep '^WM_CLASS.*"Wine"' >/dev/null; then
         xte "key Return"
       fi
   fi
   sleep 1
done

Niestety - w 1.7.25 już jest inaczej. O ile przedtem przy uruchomieniu instalki głosu Ivony:

Kod:

wine /tam/gdzie/mieszka/ewa.dat

odpowiednia linijka wygląda mniej więcej tak:

Kod:

WM_CLASS(STRING) = "ewa.dat", "Wine"

o tyle na dziś jest nieco inaczej:

Kod:

WM_CLASS(STRING) = "ewa.dat", "ewa.dat"

Na dzisiaj poradziłem sobie straszliwą prowizorką - ponieważ odpalam instalator na dedykowanym displayu Xvfb, mogę założyć że nic tam oprócz wine żadnych okienek nie wyświetla, więc po prostu wywaliłem drugiego ifa. Tyle - że takie rozwiązanie mi się niespecjalnie podoba.
Zaznaczam, że nie mogę polegać na tym że to "ewa.dat"...
Jakiś pomysł?


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#2  2014-09-02 11:45:34

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?

W Xorgu może:

Kod:

wmctrl -l

Np wynik - okienko z tym postem:

Kod:

0x0520007e  0 localhost Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine? - Forum Debian Users Gang - Mozilla Firefox

Nie wiem, czy warto się certolić za bardzo z Xami, jeśli za moment ma wreszcie startować Wayland.

W Waylandzie? pojęcia nie mam, chociaż tam też każde okno ma unikalny identyfikator, trzeba tylko znaleźć narzędzie, które identyfikuje konkretne okno, ale to już trochę zależy od kompozytora obrazu.

W każdym razie, jak się odpali w terminalu  Westona, to na terminalu fruwają identyfikatory okien otwieranych w Westonie.

Ostatnio edytowany przez Jacekalex (2014-09-02 11:48:01)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2014-09-02 11:52:15

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?

No to spróbujmy inaczej:
jak wstrzelic co sekundę entera do aktywnego okna wine?
btw. nie znam sie na Waylandzie, jak wyjdzie to się będę martwił. Szczególnie że mój skrypt ma działać na kompie z samą konsolą, bez jakichkolwiek wyświetlaczy okienek (jednym z użytkowników jest niewidomy muzyk który używa wyłącznie konsoli i linijki brajlowskiwj, bo - jak twierdzi - głośniki to on ma do muzyki a nie jakichś gadaczy), a tu Xvfb jest chyba najprostszym rozwiązaniem.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#4  2014-09-02 11:55:49

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#5  2014-09-02 12:10:09

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?

No ale ja mam problem nie z wysłaniem entera do okna, tylko ze znalezieniem tego okna!
Przypominam: ma to być aktywne okno otwarte przez program działający pod wine.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#6  2014-09-02 12:15:38

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?

Znajdowanie ID okna pod Xami masz w poście #2, choć bez grepa nie próbowałem.

EDIT:
W przypadku akcji -a - na wierzch albo -c zamknij okno, wmrctl bardzo grzecznie działa z nazwą uruchomionego programu.

Ostatnio edytowany przez Jacekalex (2014-09-02 12:25:17)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#7  2014-09-02 12:27:27

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?

No to oświeć mnie, w jaki sposób z tego co wmctrl wydziela mam znaleźć łajnowe okno.
Przypominam: nie wiem co za program tam działa, nie znam tytułu okna (szczególnie że to może być wyświetlone jakieś okno potwierdzenia czy wyboru) - ma to być aktywne okno otwarte przez wine.
Żeby nie było: fragment tego co wypluł wmctrl:

Kod:

0x04400004  1 mimbla Installer Language

Gdzie tu mam informacje o które mi chodzi?
edit
nie działa.
Może byś sprawdził a nie teoretyzował?
Mam uruchomiony instalator Ivony:

Kod:

wine ~/ivona/ewa.dat

i wyświetlane jest pierwsze okno (wybór języka instalatora).
Ja nie chcę zamykać (-c) ani aktywować (-a) okna, bo okno jest aktywne, a zamykanie jest niewskazane (bo życzyłbym sobie aby program dalej działał).

Ostatnio edytowany przez ethanak (2014-09-02 12:31:50)


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#8  2014-09-02 14:07:11

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?

Znasz nazwę polecenia wine na tyle, żeby wyciągnąć  PID?

Jeśli tak:

Kod:

wmctrl -l -p | grep `pidof winecfg.exe`
0x07400001  0 23919  localhost Konfiguracje Wine

Tutaj wyciagneliśmy dane okienka na podstawie PID.

Kod:

wmctrl -l -p | grep `pidof winecfg.exe` |awk '{print $1}'
0x07400001

A tu masz sam identyfikator okna.

Jeśli nie, to musisz to inaczej wykombinować.

Daleko niedoskonałe rozwiązanie, ale działa, pewnie można by prościej, ale nie chce mi się kilometrowych manów studiować,
zabawy z Xorgiem, to nie moja bajka, ja to cudo chcę wyętolić tak szybko, jak to tylko możliwe.
Czekam tylko na ster Nvidii działający pod Waylandem.

[BUNKIER-MODE=ON]
Zawsze też możesz zerknąć w źródełka

Kod:

wmctrl

i podpatrzyć conieco.
[BUNKIER-MODE=OFF]
xD

Pozdro
;-)

Ostatnio edytowany przez Jacekalex (2014-09-02 14:08:20)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#9  2014-09-02 14:18:45

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?

Jacekalex napisał(-a):

Znasz nazwę polecenia wine na tyle, żeby wyciągnąć  PID?

I tu jest problem rozmawiania z nieprogramistami.
Informuję że "wiem to a to".
Dostaję pytania typu "A wiesz może coś więcej?"
Odpowiedź: "nie wiem"
Pytanie; "Ale na pewno wiesz jeszcze to a to?"
Odpowiedż: "nie wiem"
Pytanie: "A znasz pid..."
Odpowiedź: "Nie znam" (bo wciórności skąd mam znać pida procesu który został odpalony pięć minut po starcie mojego skryptu)
Konkluzja: "To zobacz w źródłach programu X" (który to program gdyby interesujące mnie informacje wyświetlał to pewnie bym nie musiał do źródeł zaglądać)

Na razie kończę tą jałową dyskusję - mam większy problem (ivona demo nie działa na 1.7.25) i pięćdziesiąt maili na skrzynce. Wstrzyknięcie entera do aktywnego okna na razie mi musi wystarczyć.

Ale i tak dziękuję za próby podtrzymania mnie na duchu :)

Błogosławieni niech będą ci, którzy nie mając nic do powiedzenia, nie ubierają tego w słowa

Ostatnio edytowany przez ethanak (2014-09-02 14:21:46)


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#10  2014-09-02 14:22:18

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?

Odpowiedź: "Nie znam" (bo wciórności skąd mam znać pida procesu który został odpalony pięć minut po starcie mojego skryptu)

Do wyciągania PIDa procesu masz np pidof, pgrep, i cholera wie, co jeszcze, wystarczy wiedzieć, jaki program odpaliłeś (nazwa polecenia).
Możesz też wyczesać z wyniku ps jakby co.
Podstawy działania powłoki systemowej się kłaniają.
Z resztą, jak Twój skrypt odpala po 5 tygodniach polecenie, to zazwyczaj Perle i Pythony mają taką czarodziejską funkcję, żeby uzyskać PID dziecka - procesu potomnego.
Nie wiem tylko, czy to w powłoce jest do zrobienia, ale pewnie tak, tylko prawdopodobnie jakąś protezą.

Ostatnio edytowany przez Jacekalex (2014-09-02 14:25:27)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#11  2014-09-02 14:26:23

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?

@jacekalex: kur^wwciórności... zacznij czytać ze zrozumieniem
nie wiem jakie to jest polecenie. Poniatno?

podstawy powłoki systemowej to trochę znam... i nie musisz mi tłumaczyć do czego służy ps.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#12  2014-09-02 14:30:33

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?

Nie wiesz, jak się nazywa polecenie? to już schody...
Ten skrypt, który odpala to tajemnicze  polecenie, jest w bashu?
Skąd w ogóle się bierze polecenie, skoro nie wiesz, jak się nazywa?

Czy może jakieś czary inicjują to tajemnicze polecenie?
Czy może znając ID okna w Xach chcesz wyciągnąć nazwę polecenia?

Zawsze możesz wejść na portal szympansja.pl i poszukać sobie jakiejś wróżki. xD

Ostatnio edytowany przez Jacekalex (2014-09-02 14:33:03)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#13  2014-09-02 14:46:47

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?

Jacekalex napisał(-a):

Nie wiesz, jak się nazywa polecenie? to już schody...

Bardziej winda...

Ten skrypt, który odpala to tajemnicze  polecenie, jest w bashu?

Tak

Skąd w ogóle się bierze polecenie, skoro nie wiesz, jak się nazywa?

nie wiem - nie jestem developerem Ivony i nie wiem co ta mierda tam odpala w czasie instalacji. Jedyne co wiem to to, że jak instalator jakiekolwiek okno wyświetla to trzeba walnąć w enter.

Czy może jakieś czary inicjują to tajemnicze polecenie?

Nie wiem - sądząc po jakości wykonania Ivony (szczególnie NLP i preprocesora SAMPA/IPA) chyba tak.

Czy może znając ID okna w Xach chcesz wyciągnąć nazwę polecenia?

To też może być - tyle że nawet jeśli wyciągnę nazwę polecenia to niewiele mi ona powie.
Zauważ: wszystko było fajnie do tej pory, dopóki któraś wersja łajna nie przestała informować świata o tym, że okno jest otwarte przez wine.

Zawsze możesz wejść na portal szympansja.pl i poszukać sobie jakiejś wróżki. xD

Zawsze mogę odpalić jakiś skrypt w pywinauto i szukać sobie kontrolek (tak działa ivona_download) - ale po jaką cholerę, jeśli walą mnie wonnym filcem nazwy kontrolek, nazwy okien, czy co tam te swoje windziane wynalazki jeszcze mają, a po prostu mam kłapnąć w enter na oknie?


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#14  2014-09-02 15:01:37

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?

No nareszcie, to ivona odpala to tajemnicze polecenie polecenie, polecenie otwiera okienko, do którego trzeba wysłać ENTER?

Jeśli tak, to:
w systemie plików proc możesz na podstawie PID rodzica - ivony wytargać PIDy procesów potomnych (pstree sobie z tym radzi), prosto z powłoki pewnie też się da.
vmctrl może wyświetlić PIDy poszczególnych okien,

Kod:

wmctrl -l -p

- trzecia kolumna, to PID procesu korzystającego z danego okna.
Trzeba  by z /proc wytargać PID procesu potomnego, potem jak napisałem, albo jakoś podobnie, ale to już się robi niezła gimnastyka, w typie drapania się prawą piętą za lewym uchem.

Możesz wytargać w czasie pracy programu, jak się nazywa to tajemnicze okienko?
Może ivona podnosi zawsze proces o tej samej nazwie, której nie znany, ale da się ją ustalić?
Bo jeśli odpala polecenia o losowych nazwach, to zabawa wygląda niewesoło, mniej więcej tak, jak wyżej napisałem.


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#15  2014-09-02 15:07:32

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?

W sumie spróbuję... ale coraz bardziej przekonuję się do zabawy z pywinauto (i tak jest wymagany przy instalacji), bo za chwilę coś się w łajnie zmieni i cała robota pójdzie w (wiadomo gdzie).

A od czasu wine 1.1 było tak pięknie :(


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)