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



Użytkownik
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
doneNiestety - 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







Podobno człowiek...;)








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



Użytkownik
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







Podobno człowiek...;)








Pewnie przez xdotool, tu masz przykład:
http://superuser.com/questions/518907/command-line- … ent-x-session
Offline



Użytkownik
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







Podobno człowiek...;)








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



Użytkownik
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







Podobno człowiek...;)








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}'
0x07400001A 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



Użytkownik
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







Podobno człowiek...;)








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



Użytkownik
@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







Podobno człowiek...;)








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



Użytkownik
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







Podobno człowiek...;)








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



Użytkownik
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