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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
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:
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:
wine /tam/gdzie/mieszka/ewa.dat
odpowiednia linijka wygląda mniej więcej tak:
WM_CLASS(STRING) = "ewa.dat", "Wine"
o tyle na dziś jest nieco inaczej:
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ł?
Offline
W Xorgu może:
wmctrl -l
Np wynik - okienko z tym postem:
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)
Offline
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.
Offline
Pewnie przez [b]xdotool[/b], tu masz przykład:
http://superuser.com/questions/518907/command-line-way-to-send-keystrokes-to-a-window-open-on-a-different-x-session
Offline
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.
Offline
Znajdowanie ID okna pod Xami masz w poście #2, choć bez grepa nie próbowałem.
EDIT:
W przypadku akcji [b]-a[/b] - na wierzch albo [b]-c[/b] zamknij okno, [b]wmrctl[/b] bardzo grzecznie działa z nazwą uruchomionego programu.
Ostatnio edytowany przez Jacekalex (2014-09-02 12:25:17)
Offline
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ć [b]aktywne[/b] okno otwarte przez wine.
Żeby nie było: fragment tego co wypluł wmctrl:
0x04400004 1 mimbla Installer Language
Gdzie tu mam informacje o które mi chodzi?
[i]edit[/i]
nie działa.
Może byś sprawdził a nie teoretyzował?
Mam uruchomiony instalator Ivony:
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)
Offline
Znasz nazwę polecenia wine na tyle, żeby wyciągnąć PID?
Jeśli tak:
wmctrl -l -p | grep `pidof winecfg.exe` 0x07400001 0 23919 localhost Konfiguracje Wine
Tutaj wyciagneliśmy dane okienka na podstawie PID.
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
wmctrl
i podpatrzyć conieco.
[BUNKIER-MODE=OFF]
xD
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2014-09-02 14:08:20)
Offline
[quote=Jacekalex]Znasz nazwę polecenia wine na tyle, żeby wyciągnąć PID?[/quote]
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 :)
[i]Błogosławieni niech będą ci, którzy nie mając nic do powiedzenia, nie ubierają tego w słowa[/i]
Ostatnio edytowany przez ethanak (2014-09-02 14:21:46)
Offline
Odpowiedź: "Nie znam" (bo wciórności skąd mam znać pida procesu który został odpalony pięć minut po starcie mojego skryptu)[/quote]
Do wyciągania PIDa procesu masz np [b]pidof[/b], [b]pgrep[/b], i cholera wie, co jeszcze, wystarczy wiedzieć, jaki program odpaliłeś (nazwa polecenia).
Możesz też wyczesać z wyniku [b]ps[/b] 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
@jacekalex: kur^wwciórności... zacznij czytać ze zrozumieniem
[b]nie wiem[/b] jakie to jest polecenie. Poniatno?
podstawy powłoki systemowej to trochę znam... i nie musisz mi tłumaczyć do czego służy ps.
Offline
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)
Offline
[quote=Jacekalex]Nie wiesz, jak się nazywa polecenie? to już schody...[/quote]
Bardziej winda...
Ten skrypt, który odpala to tajemnicze polecenie, jest w bashu?[/quote]
TakSkąd w ogóle się bierze polecenie, skoro nie wiesz, jak się nazywa?[/quote]
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?[/quote]
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?[/quote]
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[/quote]
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!
[i]Zespół Adwokacki Dyskrecja[/i]Offline
#14 2014-09-02 15:01:37
Jacekalex - Podobno człowiek...;)
- Jacekalex
- Podobno człowiek...;)
- Skąd: /dev/urandom
- 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
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!
[i]Zespół Adwokacki Dyskrecja[/i]Offline
Strony: 1
- Forum Debian Users Gang
- » Elektronika i Programowanie
- » Zadanie: znajdź aktywne okno i sprawdź, czy to okno Wine?
Informacje debugowania
Time (s) Query 0.00015 SET CHARSET latin2 0.00004 SET NAMES latin2 0.00099 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.223.196.171' WHERE u.id=1 0.00103 UPDATE punbb_online SET logged=1716072003 WHERE ident='18.223.196.171' 0.00048 SELECT * FROM punbb_online WHERE logged<1716071703 0.00075 SELECT topic_id FROM punbb_posts WHERE id=274539 0.00135 SELECT id FROM punbb_posts WHERE topic_id=26348 ORDER BY posted 0.00092 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=26348 AND t.moved_to IS NULL 0.00005 SELECT search_for, replace_with FROM punbb_censoring 0.00101 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=26348 ORDER BY p.id LIMIT 0,25 0.00115 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26348 Total query time: 0.00792 s