Reklamacééé - zdroják má 29 KB a binárka 33K ! Klamavá reklama ;-).
s -n mi to padá:
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 42 (X_SetInputFocus)
Serial number of failed request: 17
Current serial number in output stream: 17
Asi bych pro to měl užití i jako ne-fulscreen aplikaci, to by se -n hodilo, ale i takhle se mi to líbí - do icewm by se to mohlo velice dobře hodit i jako launcher ikon (to by ale chtělo, aby se to neukončilo po výběru aplikace - nějaký další přepínač ?)
Zajímavé, u mě na debianu 32bit to zkompiluje do velikosti 26676 B, a dá se to stripnout na 20424 B :-)
S parametrem -n to padá na BadMatch, a bez toho parametru to funguje? A ukončí se to s -n úplně vždy? To je dost zajímavé. Hodilo by se mi to reprodukovat. Jaký window manager a OS je použit? To bych potřeboval nějak pořešit, párkrát už jsem tenhle BadMatch viděl, ale úplně nevím, jak to debugovat, protože se mi to stalo jen náhodně, a při dalším spuštění už to prošlo bez problému. Děje se to na řádku, kde kradu input okenímu manažeru, takže to asi bude záviset na WM
Neukončení po výběru aplikace zatím neumím. Ono to těď zavolá nějaký exec(), který funguje tak, že spouštěnou aplikací nahradí aktuální proces. Vyřešit se to asi musí nějak forknutím, ale s tím nemám praktické zkušenosti.
Tak to by sedělo, tady 64bit ;-). Bez -n to funguje. Zkoušel jsem to na různých místech, padá vždycky. Debian 9, (Stretch), Window manager lxde + compiz + emerald jako dekorátor (večer můžu zkusit ještě icewm. Fakt je, že emerald občas padá sám od sebe, ale compiz sám jede celkem bez problémů.
Ten fork() by imho docela rozšířil univerzálnost použití (pak možná ještě zadání rozměrů přes -geometry ;-) ).
attributes.override_redirect dělá právě to, že disabluje window manager pro tenhle program (aby tak šel udělat fullscreen bez dekorace okna). Zkoušel sem nainstalovat si emerald ale taky nějak bez úspěchu, debian nic takového nezná. Na nějakém fóru jsem našel, že emerald je mrtvý projekt ještě dýl než compiz (z toho skoro plyne že oba jsou dead).
Obecně víme kde to padá - na řádce 681 (XSetInputFocus) ... jen nevím proč, ani nevím jak to udělat aby to při chybě třeba nějak ignorovalo a pokračovalo dál.
Zkusíme něco. Přidal jsem tam, aby to XSetInputFocus volalo pouze když je aktivní fullscreen.
Prosím zkus stáhnout znovu z GITu a rekompilovat. Díky! :)
moc jsem ten kód nezkoumal, ale po kompilaci to s -n nepadá, ale vypadá to úplně stejně jako bez -n :-).
Omalovánky zvané Compiz + emerald rostou díky přátelské bandě francouzských pošuků tady:
deb http://download.tuxfamily.org/compiz/debian stretch main
> attributes.override_redirect dělá právě to, že disabluje window manager pro tenhle program (aby tak šel udělat fullscreen bez dekorace okna
Tak tohle je samozřejmě ta největší hovadina (promiňte), co jsem slyšel. Fullscreen stylem "override redirect" a nastavením okna na pozici 0,0 a velikost na šířku/výšku root okna dělají dodnes jen prasácké programy (převážně komerční hry). Počti třeba na 1). Hledej _NET_WM_STATE a _NET_WM_STATE_FULLSCREEN. To je správný způsob, jak si o fullscreen zažádat u window manageru.
1) https://specifications.freedesktop.org/wm-spec/1.3/ar01s05.html
Jak jsem psal už v blogu samotném, celý tenhle program jsem spáchal za 4 dny bez jakékoli znalosti Xlib, a s minimálníma základama C. Je s podivem že to vůbec funguje :)
Když jsem bádal nad tím, jak udělat fullscreen, našel jsem popis kde bylo vysvětleno, jak mplayer má problém právě s tím, že i když požádá window manager o fullscreen, někde to nemusí fungovat. A bylo tam popsáno právě použití override redirect, a to že funguje stoprocentně všude. Tudíž jsem to použil, aniž bych pochopil co jsem přesně udělal :) Bylo to na 3 řádky kódu.
Pokud je čistší cesta, která funguje všude, rád ji tam dám. Ale potřebuju nějaký pár-řádkový example. Odkaz na desetistránkovou specifikaci z freedesktop fakt nebudu číst, neb jsem příliš líný to pochopit, nemám v úmyslu se živit vývojem aplikací pro X. Prosím, pokud oněch pár řádků znáte, napište je. Děkuji.
> Zde je kod, 2 moznosti: http://pastebin.com/EHFAFSJj
zkompiluje se to OK, ale nefunguje to. Apka nastartuje v okne. Mam momentalne LXDE
viz https://brennan.io/2015/01/16/write-a-shell-in-c/#how-shells-start-processes
(z článku o psaní shellu pro linux)
Tomáš je autorem několika více či méně známých projektů jak z oblasti operačních systémů, tak internetu. V současnosti samozvaný expert na Linux, Bash, PHP a MySQL.
Přečteno 25 946×
Přečteno 23 975×
Přečteno 19 500×
Přečteno 18 284×
Přečteno 12 888×