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 xdotool, tu masz przykład:
http://superuser.com/questions/518907/command-line- … ent-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 -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)
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ć aktywne 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?
edit
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
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)
Offline
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)
Offline
@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.
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
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?
Offline
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,
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.
Offline
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 :(
Offline
Strony: 1