Sziasztok!
Most csak kíváncsiskodom, infókat gyűjtök egy későbbi játszogatáshoz. (mert most épp tonna más dolgom van)
Tegyük fel, hogy adott egy minimálisan telepített linux rendszer, PC vagy raspberry pi, kb most mind1 is. Nincs rajta semmi GUI telepítve, csak a parancssor.
Ha erre szeretnék írni egy grafikus felülettel rendelkező programot, akkor milyen lehetőségek vannak? GUI-t nem szeretnék telepíteni, törekednék a minimálra. Nem kell ablakozó felület, nem kellenek ikonok, nem kell tálca és semmi lópikula, csak annyi, hogy tudjak rajzolni a képernyőre (lényegében egy darab ablak) és azon belül esetleg észlelni a kattintásokat (raspberry esetén akár touchscreen-es adatbevitelt, de az kb ugyanaz mint az egér)
Opengl nem lenne rossz.
Mit gondoltok róla? Van tapasztalatotok ebben? Mit javasoltok?
- 1749 megtekintés
Hozzászólások
Azt látom, hogy sokakat foglalkoztat az opengl X Server nélkül.
https://devblogs.nvidia.com/egl-eye-opengl-visualization-without-x-serv…
- A hozzászóláshoz be kell jelentkezni
Ezek alapjan nem vagyok biztos benne, tudod-e egyaltalan, mi valojaban a GUI, DE, stb. X szerver fello, alkalmazas racsattan a desktopra, es ennyi. Ha egy komplett toolkit funkcionalitasat (pl. input kezelese) akarod megirni, akkor bele se kezdj, hasznalj meglevot, pl. SDL2, GTK, Qt.
- A hozzászóláshoz be kell jelentkezni
Itt a QT es a GTK ami sok helyet foglal, nem az X. Ha minimalisat akar (QT es GTK nelkul) akkor vagy hasznalja amit az X tud (randa), vagy ir maganak 'gombra click' es tarsai funkciokat. De akkor mar framebuffer is lehetne akar.
Szep challenge, de biztos megeri?
____________________
echo crash > /dev/kmem
- A hozzászóláshoz be kell jelentkezni
Ha már raspberry pi, akkor nézd meg mondjuk a libreelec-et, hogy az hogyan kezeli. Az is opengl (es) alapon tolja a kodit.
- A hozzászóláshoz be kell jelentkezni
+1, de ez is szep kihivas :)
____________________
echo crash > /dev/kmem
- A hozzászóláshoz be kell jelentkezni
ncurses :)
--
"After successfully ignoring Google, FAQ's, the board search and leaving a undecipherable post in the wrong sub-forum don't expect an intelligent reply."
- A hozzászóláshoz be kell jelentkezni
Lol, de egyébként meg +1!
--
"Nem akkor van baj amikor nincs baj, hanem amikor van!"
Népi bölcsesség
- A hozzászóláshoz be kell jelentkezni
Mi a cél? Az X nagy terhelésű arra, amire szeretnéd használni, vagy csak kiváncsiságból közelebb akarsz lenni a vashoz (hatalmas idézőjelekkel), vagy vagy vagy?
A másik, hogy rendbe kéne rakni a fogalmakat a leírásodban, a "GUI nélkül akarok GUI-t készíteni" önellentmondásos, illetve nem tiszta, hogy mi a gond azzal, ha van egy X, van rajta mondjuk egy GTK teljes képernyős ablak, és annak a tartalmát variálod, akár egy darab képet frissítesz benne, ...
- A hozzászóláshoz be kell jelentkezni
VT100 terminál
- A hozzászóláshoz be kell jelentkezni
Minél kevesebb fölösleges folyamatot szeretnék a háttérben.
GUI: Grafikus Felhasználói Felület, pl Gnome, KDE.
A magyar wiki mint létom alapból így kezdi a GNOME-val:
https://hu.wikipedia.org/wiki/GNOME
"A GNOME (GNU Network Object Model Environment) egy grafikus felhasználói felület Linuxhoz és egyéb Unix-szerű operációs rendszerekhez. "
És tleg, egy grafikus felületet hoz létre, ami képes betölteni egyéb programokat akiknek szintén van GUI-ja. De tök mind1, értette mindenki mit akartam mondani.
Lehet, hogy a végén az X server lesz a megoldás, de gondoltam megkérdem a linux szakikat, hogy mit gondolnak, van e más javaslat amivel a képernyőre tudok rajzolni, esetleg opengl-ezni, anélkül, hogy felhasználnék hozzá sok programot meg libet.
Mint írtam, nem kell, hogy komplett ablakozóm legyen, nem kell, hogy lehessen őket mozgatni, stb. Az X server lehet, hogy a feladatra túl robosztus, túl sok mindent tartalmaz amit nem használnék ki. Ebből kifolyólag több erőforrást is használ, és a stabilitás is kérdés lehet. (de ez utóbbit nem tudom, ezért is írtam a kérdést)
Meg lehetne oldani, hogy feldobok egy KDE-t, és az előtérbe kinyomok egy progit full screen-be, de nem lenne eléggé stabil hosszútávú önálló futtatásra. (igen, lassan kirajzolódik az is, hogy mifélét akarok csinálni, de szerintem nem releváns, ezért nem fejtem ki)
Tehát összegezve:
Az érdekelne, hogy milyen lehetőségek vannak arra, hogy a képernyőre rajzoljak, akár opengl-el akár anélkül, úgy, hogy a legminimálisabban használok hozzá egyéb lib-eket és szoftvereket (nem zárom ki őket, csak minimalizálni szeretném). Természetesen nem akarok lemenni az assembly-ig.
- A hozzászóláshoz be kell jelentkezni
Az X szerintem elég stabil ahhoz, hogy merj rá építeni, elég kis esélyét látom annak, hogy az X vagy a rajta használt GTK elemek hibái akadályozzanak, vagy azok stabilitásban ne legyenek elegendőek.
Ha mégse akarsz X-et használni, akkor kb. az NVIDIA-s linkelt témán indulj el, vannak render farmokon használt megoldások erre, de azt nem tudom, hogy ott a bemenet egyáltalán kezelődik-e (kijelzőn bevitt kattintások ésatöbbi, bár ez is egyszerűen virtualizálható), könnyen lehet körülményesebb, mint a másik megoldás (elég speciális terület, kevesen foglalkoznak vele).
Ha maradsz az X-nél, akkor a GTK szerintem elég light tud lenni ehhez (vannak persze még kisebb, kevesebb függőségű GUI eszköztárak), ha OpenGL-ben akarsz rajzolni, akkor annak a kimenetét a GTK meg tudja jeleníteni. KDE-nél jóval kisebb lenne, az biztos, de még a GTK-nál is van kisebb, csak ilyen esetekben nem tudom mennyire lehet mód arra, hogy egy OpenGL megjelenítést beágyazz, affelé közvetítsd a kattintásokat, bemenetet.
- A hozzászóláshoz be kell jelentkezni
Ha igazán minimalista akarsz lenni, fejlessz FreeDOS alá VESA-t használó GUI-t :), mint a régi szép időkben. Én már annak is örülök, ha minimalista X felett elindul teljes képernyőben egy böngésző vagy egy rdesktop.
- A hozzászóláshoz be kell jelentkezni
„Pár marék nerd-et leszámítva kutyát se érdekel már 2016-ban a Linux. Persze, a Schönherz koliban biztos lehet villogni vele, de el kéne fogadni, ez már egy teljesen halott platform. Hagyjuk meg szervergépnek…” Aron1988@PH Fórum
- A hozzászóláshoz be kell jelentkezni
Ez nem az, hogy egy GUI-s java app-ot futtat, úgy, hogy neki nem kell a GUI-t látnia, ezért nem akar X-et használni? A kérdezőnek kell GUI, nem csak az app kimenetét akarja olvasgatni.
- A hozzászóláshoz be kell jelentkezni
Akkor a lényeget nem értetted belőle. Ezt framebuffer-technikának hívják. A java app csak példaként szolgált abban a posztban, bármilyen más GUI-s alkalmazást is lehet így futtatni (bár lehet vannak kivételek, amelyek erősebben függnek pl. vagy az X-től vagy a Waylandtől). Pont arról van szó, hogy csak az alkalmazás látszódjon, nem lesz X, nem lesz DE/WM, nem lesz asztal, ikonok, ablakdekorációk (fejléc, keret, görgetősáv, stb.).
„Pár marék nerd-et leszámítva kutyát se érdekel már 2016-ban a Linux. Persze, a Schönherz koliban biztos lehet villogni vele, de el kéne fogadni, ez már egy teljesen halott platform. Hagyjuk meg szervergépnek…” Aron1988@PH Fórum
- A hozzászóláshoz be kell jelentkezni
Vágom, hogy mire jó, érdeklődésből elolvastam a wiki oldalt, ott találtam: "Xvfb performs all graphical operations in virtual memory without showing any screen output". Viszont a téma indítójának nem az kell, hogy ne legyen grafikus kimenet (ezért is írtam neki is, hogy nagyon félreérthető a téma neve, és némelyik mondat), hanem az, hogy ne legyen neki felesleges X és egyebek, hanem parancssorból indíthasson egy programot, ami kb. mint a DOS-os időkben fullscreen, OpenGL-es, ésatöbbi. Látni akarja a képet, és bemenetet is akar kezelni.
Szerk.:
"Since it shares code with the real X server", ezért az X hibáinak, stabilitásának lehetséges problémáit ezzel nem ússza meg.
- A hozzászóláshoz be kell jelentkezni
Csak hétvégén lesz időm tesztelni. Lehet ez a konkrét példa nem mutat kimenetet, de én régebben használtam ilyesmi framebufferes technikát, a konkrét parancsra már nem emlékszem, de működött.
„Pár marék nerd-et leszámítva kutyát se érdekel már 2016-ban a Linux. Persze, a Schönherz koliban biztos lehet villogni vele, de el kéne fogadni, ez már egy teljesen halott platform. Hagyjuk meg szervergépnek…” Aron1988@PH Fórum
- A hozzászóláshoz be kell jelentkezni
Wiki oldal szövegezése is félreérthető, mert van kimenete, fájlba irányítható, erre jó is, de display-t is létrehoz neki ha jól értem. Lehet, hogy használható arra is, hogy 1 alkalmazás menjen egy display-en, tényleges ablakozás nélkül, de nem látom, hogy a bemenetet is kezelné (pl. egér koordinátát).
(Viszont az askubuntu.com-os kérdésben pont csak annyit kerestek, hogy menjen grafikus kimenet nélkül a program, az xvfb lehet ettől több, de nem arra ajánlották, ami a kérdezőnek kell. Ő kb. google://opengl+without+x -et akar, de amennyire látom kevesen foglalkoznak ilyennel, úgy, hogy bemenet kezelés is legyen, amibe belefutottam az mind X-re épülő OpenGL implementáció volt.)
- A hozzászóláshoz be kell jelentkezni
A framebuffer grafikus kimenetét igazolja az, ami a fb betöltésének az indikátora is egyben: a konzolon megjelenő grafikus pingvin, ami a wikin is látszik.
Kb. ennyit tudok róla, amióta hajdan konzolon a nagyobb felbontás kedvéért használtam.
- A hozzászóláshoz be kell jelentkezni
Azért van X nélkül is élet:
http://www.svgalib.org/
Ezeket a libeket már sajnos kivették például a Debian Linuxból, de gondolom azért még használható.
Ami eszembe jut még az SDL. Tele van a tároló libsdl kezdetű csomagokkal.
A multimédia mellett 2D-ben tudsz megjeleníteni, vagy összevarrható OpenGL-el.
http://www.libsdl.org/
Az SDL megy X nélkül is.
Ha meg X, akkor:
Az X önmagában nem sok, nem nagy, csak nem kell mellé tenni egy ablakozó környezetet.
Egy minimális X az xinit csomag telepítésével megoldható. Persze felmegy néhány függőség is, de a messze elmarad egy GNOME, KDE, stb ablakozó környezet nagyságától. De vannak minimális ablakozó felületek is, pédául jwm. Ez nem jó?
- A hozzászóláshoz be kell jelentkezni
Konzolból links2 indítása -g opcióval és így a framebufferre rajzolva, a programodat meg webserver szolgálná ki localhost-ra kapcsolódva a böngészőből?
- A hozzászóláshoz be kell jelentkezni
Nem tudom volt-e, de érdemes lehet megnéznd: https://i3wm.org/screenshots/
- A hozzászóláshoz be kell jelentkezni
Qt+framebuffer?
- A hozzászóláshoz be kell jelentkezni
Én csináltam ilyet többfélét:
* Karakteres módú programot pl ncurses-sel lehet írni, a VT-1-6-on lehet futtatni, megoldható, hogy boot után azonnal induljon
* framebuffer alapú grafikus programot is lehet a VT-1-6-on futtatni. Amennyire emlékszem két nehéz ügy volt vele:
** a virtuális terminál váltás rohadt bonyolult (azóta nem csodálkozom, hogy időnként még az X is fagy VT váltáskor)
** a V-sync-et sehogy sem sikerült elkapnom, ezért elvben tearingelhetett a programom. Csak játszós cucc volt, engem nem zavart.
* PI-on lehetett direkt OpenGL kontextust kérni a képernyőre és arra teljes képernyős módban rajzolni. Példakódok alapján csináltam sokéve, nincs már meg, de egyszerű volt. Ez driver függő, hogy meg lehet-e csinálni, PC-n nekem nem sikerült régebben.
Ilyet még nem csináltam, de:
* A Wayland elvileg sokkal egyszerűbb, mint az X. Lehet, hogy egyből megfelel az igényeidnek, vagy ha nem, abból ki lehet kopizni azt a részt, ami inicializálja a képernyőt.
Egyébként meg vannak hasonló célra kitalált X ablakkezelők, be lehet úgy konfolni, hogy egyetlen teljes képernyős alkalmazás fusson, és akkor különösebben nincs útban az X.
- A hozzászóláshoz be kell jelentkezni