A címben említett Xpra program a deatch funkciót tudja is, de egy gondom van vele: az xpra alatt futó programok tray-icon-ja nem jelenik meg, ilyen hibaüzenetet kapok: "I couldn't detect any system tray on this system".
Próbáltam elindítani valamilyen panelt (kicker, trayer, xfce4-panel) de ilyenkor az egész panel jelenik meg és nem csak az az ikon, ráadásul nem mindig érzékeli, ha rákattintok az ikonra.
Valamelyikőtök próbálkozott már ilyesmivel?
- raron blogja
- A hozzászóláshoz be kell jelentkezni
- 1250 megtekintés
Hozzászólások
sub
- A hozzászóláshoz be kell jelentkezni
Most találtam: fbpanel -el egész jól megy, még a menük is normálisan megjelennek, csak háát egy külön panelt kell pakolgatni...
Valami egyéb ötletetek esetleg?
- A hozzászóláshoz be kell jelentkezni
subscribe
- A hozzászóláshoz be kell jelentkezni
http://en.wikipedia.org/wiki/Xpra
Valahol olvastam már róla; valóban eltér a többi X forwarding megoldástól. A probléma valószínűleg itt keresendő (a fenti wp cikkből idézek):
It also acts as a window manager for the X server it is running against, but it doesn't actually have any window manager policy built into it. Instead, it takes all the window management requests from the applications, sends them over the wire to the client, who then issues those same requests on the real display, waits for further answer the real window manager gives, and then forwards that answer back to the xpra server.
Valószínűleg a window manager protocol továbbítása hiányos az Xpra-ban. Pontosabban csak abban a verzióban, amit használsz; a honlapjuk (http://xpra.org/) szerint "System tray menu for easy disconnection". Próbálj forrásból feltenni egy friss verziót.
... Hm. A "System tray menu for easy disconnection"-t bizonyára félreértettem; ez inkább arról szól, hogy a systray-ben kapsz egy gombot, amivel gyorsan-könnyen le tudsz csatlakozni. Akkor nemtom. Google mit mond?
Szerk2: ja, az xpra.org egy xpra fork.
- A hozzászóláshoz be kell jelentkezni
Vajon miért nem úgy csinálták meg, mint az ssh X forwarding-ot?
- A hozzászóláshoz be kell jelentkezni
Pont azért, mert az ssh forwarding "elszakadhat". Ahhoz, hogy egy X kliens (= X-es kimenetű program) életben maradjon, kell hozzá egy szerver; bármi, ami tud vele X protokollon beszélgetni (request-eket fogadni, válaszokat küldeni, ill. notification-öket küldeni). Ugyanez a helyzet a screen programmal; ahhoz, hogy egy TTY-t használó alkalmazás futni tudjon, kell alája egy (fizikai vagy pszeudo-)terminál.
Amikor ssh-val parancssorilag bejelentkezel, akkor az sshd létrehoz egy pszeudo-terminált a távoli gépen. Amit az ott futó program ír/olvas a terminálról (ami a pszeudo-terminál slave oldala), azt az sshd olvassa/írja a pszeudo-terminál master oldalán. Az sshd ezt a forgalmat OpenSSL és TCP socket felett továbbítja az ssh kliensnek, amely a helyi gépeden ezt a forgalmat a normál terminálodra írja / arról olvassa. Ez a normál helyi terminál lehet pl. linux vt, vagy pszeudo-terminál slave fele (az rendelkezik terminál-jellemzőkkel), melynek master felén lehet mondjuk helyi xterm (amelyik rajzolja a betűket, meg a ^C X11 eseményt kezeli).
helyi xterm -- helyi pty master -- helyi pty slave -- ssh -- sshd -- távoli pty master -- távoli pty slave -- mc
Ugyanez screen-nel, távoli gépen:
helyi xterm -- helyi pty master -- helyi pty slave -- ssh -- sshd -- távoli pty master -- távoli pty slave -- screen kliens -- screen szerver -- pty master -- pty slave -- mc
Azt kell látni, hogy az ssh-sshd kapcsolat megszakadhat. Az mc-nek viszont mindenképpen kell egy terminál, amelyre írhat (pty slave). A pty slave-nek kell egy pty master oldal, amihez meg kell egy processz, ami nyitva tartja. Ez a processz a screen server, ami robusztus, nem patkol el, és ami a lényeg, a screen server és az mc közötti teljes útvonal a teljes gépen belül van, tehát nem függ a hálózattól.
Ugyanez X-re. A helyi X így néz ki:
helyi X szerver -- unix domain socket v. shm -- helyi X kliens
A nem biztonságos (ma már nem használt) TCP feletti kapcsolat ugyanez, csak unix domain socket helyett TCP socket van (és nincs shm).
helyi X szerver -- TCP socket -- távoli X kliens
Az ssh forwarding:
helyi X szerver -- unix domain socket -- ssh (mint helyi X kliens) -- sshd (mint távoli X szerver) -- unix domain socket -- távoli X kliens.
A távoli X kliens az sshd-t az ott beállított DISPLAY változó alapján találja meg. Az X autentikáció pedig úgy működik (ha jól emlékszem), hogy az sshd a távoli gépen belépéskor lefuttatja az xauth-ot, ami legenerál egy cookie-t a ~/.Xauthority file-ba, ahhoz a DISPLAY-hez, amely az sshd-re mutat. Amikor a távoli kliens elindul és autentikálja magát az ~/.Xauthority-ból, akkor az sshd (ha jól tudom) ezt ellenőrzi. A helyi gépen (ahol az igazi X szerver fut) pedig az ssh (mint helyi X kliens) csatlakozik a helyi ~/.Xauthority használatával a helyi X szerverhez.
Ez jó, csak meg tud szakadni. A következő lépés az, amit a screen is csinál: kell egy X szerver, ami a távoli gépen van, hogy a teljes (pontosabban, egy teljes) szerver-kliens út meglegyen a távoli gépen.
Az egyik lehetőség erre az Xvnc, amely tokkal vonóval csinál egy X szervert a távoli gépen, és teljesen önálló VNC protokollon érhető el.
helyi X szerver -- vnc kliens (mint helyi X kliens is!) -- távoli VNC szerver (mint távoli X szerver is!) -- távoli X kliens
Ebben az a cumi, hogy a VNC szerver egy "root window"-val rendelkező displayt valósít meg, így eleve kell neki egy önálló WM is, és ezért látszik külön dobozban a helyi gépen.
Az xpra ehelyett azt csinálja (ha jól értem), hogy
helyi X szerver -- xpra kliens (mint helyi X kliens is) -- távoli xpra szerver (mint speciális (= WM) távoli X kliens) \
\
távoli X kliens 1 -- távoli Xvfb
távoli X kliens 2 /
A compositing window manager (ami egy speciális X kliens) a többi kliens ablakának a belsejét is megkapja (ezért tudná pl. OpenGL-lel kockára renderelni), nem csak a "new window mapping request"-eket meg ilyeneket. Ebben az esetben az xpra szerver ezt a stuffot visszanyomja az xpra kliensnek. A használt protokoll egyedi, és nem root window bitmap szintű (mint a VNC-nél), hanem "compositing" szintű. Az xpra kliens ezeket az ablakokat megnyitogatja (helyi X kliensként) a helyi X szerveren, amelyet a helyi speciális X kliens (WM) fog elrendezgetni.
Arra lennék nagyon kíváncsi, hogy ha az xkill-lel lenyomsz egy ablakot, amelyet az xpra kliens nyitott, akkor az összes ilyen ablak (amelyek esetleg más távoli alkalmazásokhoz tartoznak) is becsukódik-e.
Az ssh forwarding esetében ugye minden egyes távoli alkalmazáshoz az ssh kliens (mint helyi X11 kliens) új kapcsolatot hoz látre a helyi X11 szerverrel (a unix domain socket-en). Ebből a szempontból (is) az ssh speciális X11 kliens; a legtöbb X kliens nem hoz létre egynél több kapcsolatot a szerverrel. Az xkill hatására az X szerver lerúgja az érintett kapcsolatot, amitől azonban az ssh-nak még n-1 kapcsolata megmarad (a maradék távoli alkalmazás forwardjai).
Az az érdekes, hogy az xpra, mint egyetlen távoli X kliens, elég okos protokollal bír-e ahhoz, hogy a távoli, különböző alkalmazások ablkait alkalmazásoknak megfelelő X11 kapcsolatokba csoportosítsa. Teszem azt, a távoli gépen elindul a firefox 2 ablakkal, meg egy xterm. (Ez az Xpra szerver (mint wm) szemében 3 külön ablak.) Ennek elvileg az xpra kliens és a helyi X11 szerver között összesen 2 kapcsolatot kellene megfeleltetni (a unix domain socket-en), hogy amikor az xkill-lel belebök valaki az egyik firefox ablakba, akkor a firefox elpukkanjon (a másik ablakával együtt), az xterm azonban ne.
Hát ez hosszú lett.
- A hozzászóláshoz be kell jelentkezni
xkill-re az egész xpra attach meghal.
Én valami ilyesmire gondoltam:
távoli X kliens (mondjuk xclock) -- buherált távoli X szerver (valami xephyr vagy xvfb szerűség) -- unix socet / shm / TCP --
-- spéci X kliens -- helyi X szerver
Ahol a buherált távoli X szerver kb azt tudná, mint az xvfb, csak a rajta megjelenő ablakokat "át tudná adni" a spéci X kliensnek. A spécibb kéréseket (most a systray-hoz hasonlókra gondolok) "pufferelné" (nem a legjobb szó...) és amikor csatlakozott hozzá a spéci X kliens, akkor annak átadná, ami megjelenítené a helyi X szerveren.
- A hozzászóláshoz be kell jelentkezni
távoli X kliens (mondjuk xclock) -- buherált távoli X szerver (valami xephyr vagy xvfb szerűség) -- unix socet / shm / TCP --
-- spéci X kliens -- helyi X szerver
Szerintem ez nagyjából az Xvnc-nek felel meg (lásd fentebb), és szerintem az X szerver szintjén az a fogalom, hogy "systray" már nem létezik. Ez legjobb esetben is WM szintű fogalom, amit (ha jól sejtem) WM hintekkel vezérelnek. Például néhány régebbi ablakkezelő kliens (twm, mwm, CDE) ugyanazon az X-en futva, mint egy modern WM kliens, bizonyára nem tud tray ikonokat kezelni. Az IceWM-be is az utóbbi 10 évben vezették be :), talán a gnome-kompatibilitás részeként.
A spécibb kéréseket (most a systray-hoz hasonlókra gondolok) "pufferelné" (nem a legjobb szó...) és amikor csatlakozott hozzá a spéci X kliens, akkor annak átadná, ami megjelenítené a helyi X szerveren.
Ez tök logikus, pontosan ezt kellene csinálnia az xpra-nak. Valószínűleg nem érti az ikon hint-eket. (Vagy amivel éppen az ikonok meg vannak különböztetve.)
- A hozzászóláshoz be kell jelentkezni
subscribe
- A hozzászóláshoz be kell jelentkezni
subscribe
- A hozzászóláshoz be kell jelentkezni