Quel navigateur internet faire tourner directement en framebuffer?

Tags: #<Tag:0x00007f574e2ef0c0> #<Tag:0x00007f574e2eef58>

Bonjour,

Sur un vieux Raspberry Pi 2, je cherche à exécuter un navigateur internet en mode kiosk directement au démarrage et via le framebuffer de la carte graphique sans passer par un serveur d’affichage type Xorg ou Wayland.

Avez-vous un tel navigateur à me conseiller ? et idéalement disponible dans les dépôts debian. :wink:

J’ai essayé links2, mais il ne détecte pas le framebuffer :

root@rpi:~# links2 -g -driver fb https://www.debian.org/
Unknown graphics driver fb.
The following graphics drivers are supported:
x

J’ai essayé netsurf. Ça fonctionne, mais il n’affiche pas correctement les pages web. Entre autre, il ne supporte pas le format SVG or le site que je veux afficher l’utilise abondamment.
Voici la commande :

root@rpi:~# netsurf-fb -f sdl -b 16 -w 800 -h 400 http://www.debian.org/

Je n’ai pas trouvé d’autres paquets debian correspondants.
La commande :

root@rpi:~# aptitude search '?tag(web::browser) ?tag(interface::framebuffer)'
i   links2                                                     - Navigateur web à la fois en mode graphique et texte                  
p   w3m-img                                                    - utilitaires pour w3m gérant l'extension des images en ligne          

ne retourne même pas le paquet netsurf-fb, alors qu’il est bien présent dans le dépôt main car il ne comporte que le tag ‹ uitoolkit::sdl ›.

Donc si vous connaissez d’autres navigateurs utilisant directement le framebuffer, je suis preneur ! :pray:

J’ai également essayé de cross compiler Framebuffer-browser sur mon PC pour que ça compile plus vite. Ça marche en compilant avec des bibliothèques dynamiques, mais dans ce cas il faut installer un tas de paquets QT5 sur le Raspberry Pi. Et j’ai échoué à essayer de le compiler en mode statique. J’ai le message d’erreur :

[ 83%] Linking CXX executable FBrowser
/usr/bin/ld : tentative de liaison statique de l'objet dynamique `/usr/lib/arm-linux-gnueabihf/libQt5WebEngineWidgets.so.5.15.18'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/FBrowser.dir/build.make:152: FBrowser] Error 1
make[1]: *** [CMakeFiles/Makefile2:90: CMakeFiles/FBrowser.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

Il essaie de lier en statique des bibliothèques dynamiques, ce qui n’est pas faisable.

Et donc, je patauge, je patauge… :anguished:

dillo doit approcher de ce que tu recherches en compromis, avec un doute si besoin de serveur graphique ou pas, et doute sur traitement svg.

dillo  3.0.5-7.2  ●   1,5 MB
↳ Small and fast web browser
↳ https://dillo-browser.github.io/old/

Depends: wget libc6 libfltk1.3t64 libjpeg62-turbo libpng16-16t64 libssl3t64 libstdc++6 libx11-6 zlib1g

Si c’est seulement libQt5WebEngineWidgets.so qui manque pour la compilation, ce n’est pas insurmontable: Debian libqt5webenginewidgets5 trixie/armhf

/usr/lib/arm-linux-gnueabihf/libQt5WebEngineWidgets.so.5.15.18

dillo ne convient pas en effet. Il dépend bien de Xorg.

Quant à libqt5webenginewidgets5, la paquet est déjà bien installé et la compilation avec bibliothèques dynamiques a fonctionné.
Le problème de la compilation statique est que make attend des bibliothèques qui puissent être liées statiquement (je crois avec une extension en « .a »).

Compiler avec des librairies statiques présuppose bien sûr une configuration en conséquence (pas forcément trivial sans indications précises).
Framebuffer-browser est donc compilé (en dynamique) ?
Si oui, satisfait ?

Framebuffer-brower est compilé en dynamique, mais pas encore transféré sur le Raspberry Pi car j’aurais aimé éviter de devoir installer tous les paquets nécessaires aux dépendances.
Donc, pour le moment pas encore véritablement testé…

1 J'aime

Tu peux déjà faire un ‹ ldd › sur le binaire pour voir ce qu’il réclame en librairies.
En dynamique, au moins pour tester, tu peux installer les librairies en installant que les depends (sans recommends).

apt-get --no-install-recommends install ...

Bonjour @Verner ,
Oui, j’ai finalement installé les librairies requises sur le Raspberry Pi.

Juste pour info, < ldd > retourne 92 dépendances !
Mais si j’utilise la commande recommandée dans la page de manuel de < ldd > :

root@rpi:~# objdump -p FBrowser | grep NEEDED | sed -E 's/^\s*NEEDED\s*(.*)$/\1/'
libQt5WebEngineWidgets.so.5
libQt5Widgets.so.5
libQt5Gui.so.5
libQt5Network.so.5
libQt5Core.so.5
libstdc++.so.6
libgcc_s.so.1
libc.so.6

il n’y en a plus que 8 dépendances principales.

Et dans les faits, il ne suffit que dans spécifier deux à installer, les autres sont automatiquement installées :

root@rpi:~# aptitude install --without-recommends libqt5webenginewidgets5 libqt5gui5-gles
Les NOUVEAUX paquets suivants vont être installés :     
  libdouble-conversion3{a} libgles2{a} libharfbuzz-subset0{a} libinput-bin{a} libinput10{a} libmd4c0{a} libminizip1t64{a} libmtdev1t64{a} 
  libpcre2-16-0{a} libqt5core5t64{a} libqt5dbus5t64{a} libqt5gui5-gles libqt5network5t64{a} libqt5positioning5{a} libqt5printsupport5t64{a} 
  libqt5qml5{a} libqt5qmlmodels5{a} libqt5quick5{a} libqt5quickwidgets5{a} libqt5webchannel5{a} libqt5webengine-data{a} libqt5webenginecore5{a} 
  libqt5webenginewidgets5 libqt5widgets5t64{a} libwacom-common{a} libwacom9{a} libxcb-render-util0{a} libxcb-shape0{a} libxcb-xinerama0{a} 
  libxcb-xinput0{a} 
Les paquets suivants sont RECOMMANDÉS mais ne seront pas installés :
  geoclue-2.0 libqt5svg5 qt5-gtk-platformtheme qttranslations5-l10n qtwayland5 
0 paquets mis à jour, 30 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de télécharger 54,9 Mo d'archives. Après dépaquetage, 185 Mo seront utilisés.
Voulez-vous continuer ? [Y/n/?] y

Et au final, après avoir copié les deux fichiers nécessaires < FBrowser > et < config.json > sur le compte utilisateur du Raspberry Pi (en root, ça bloque), le navigateur affiche relativement bien les pages webs et en pleine écran (sans barre d’outils, barre de navigation, barre d’état), ce qui correspond parfaitement à mon besoin ! :grinning:

Je vais donc partir la-dessus et je marque le post comme résolu.

Merci pour ton aide. :+1:

Ça me surprend que le binaire se lance sans les 92 librairies réclamées.
Peux-tu refaire un ldd pour vérifier et confirmer ?

@Verner , voici la sortie de la commande :

odio@rpi:~$ ldd FBrowser 
        linux-vdso.so.1 (0xbed3b000)
        libQt5WebEngineWidgets.so.5 => /lib/arm-linux-gnueabihf/libQt5WebEngineWidgets.so.5 (0xb6e50000)
        libQt5Widgets.so.5 => /lib/arm-linux-gnueabihf/libQt5Widgets.so.5 (0xb69b0000)
        libQt5Gui.so.5 => /lib/arm-linux-gnueabihf/libQt5Gui.so.5 (0xb6545000)
        libQt5Network.so.5 => /lib/arm-linux-gnueabihf/libQt5Network.so.5 (0xb6400000)
        libQt5Core.so.5 => /lib/arm-linux-gnueabihf/libQt5Core.so.5 (0xb5ff0000)
        libstdc++.so.6 => /lib/arm-linux-gnueabihf/libstdc++.so.6 (0xb5e40000)
        libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xb5e00000)
        libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb5cd0000)
        libQt5WebEngineCore.so.5 => /lib/arm-linux-gnueabihf/libQt5WebEngineCore.so.5 (0xae5b0000)
        libQt5Quick.so.5 => /lib/arm-linux-gnueabihf/libQt5Quick.so.5 (0xae209000)
        libQt5PrintSupport.so.5 => /lib/arm-linux-gnueabihf/libQt5PrintSupport.so.5 (0xae190000)
        libQt5QuickWidgets.so.5 => /lib/arm-linux-gnueabihf/libQt5QuickWidgets.so.5 (0xb6ed1000)
        /lib/ld-linux-armhf.so.3 (0xb6ee0000)
        libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xae120000)
        libGLESv2.so.2 => /lib/arm-linux-gnueabihf/libGLESv2.so.2 (0xae10a000)
        libpng16.so.16 => /lib/arm-linux-gnueabihf/libpng16.so.16 (0xae0c0000)
        libz.so.1 => /lib/arm-linux-gnueabihf/libz.so.1 (0xae0ad000)
        libharfbuzz.so.0 => /lib/arm-linux-gnueabihf/libharfbuzz.so.0 (0xadfb0000)
        libmd4c.so.0 => /lib/arm-linux-gnueabihf/libmd4c.so.0 (0xb6ea4000)
        libgssapi_krb5.so.2 => /lib/arm-linux-gnueabihf/libgssapi_krb5.so.2 (0xadf60000)
        libdouble-conversion.so.3 => /lib/arm-linux-gnueabihf/libdouble-conversion.so.3 (0xadf30000)
        libicui18n.so.76 => /lib/arm-linux-gnueabihf/libicui18n.so.76 (0xadcc0000)
        libicuuc.so.76 => /lib/arm-linux-gnueabihf/libicuuc.so.76 (0xadb30000)
        libpcre2-16.so.0 => /lib/arm-linux-gnueabihf/libpcre2-16.so.0 (0xadaa0000)
        libzstd.so.1 => /lib/arm-linux-gnueabihf/libzstd.so.1 (0xada00000)
        libglib-2.0.so.0 => /lib/arm-linux-gnueabihf/libglib-2.0.so.0 (0xad8d0000)
        libQt5WebChannel.so.5 => /lib/arm-linux-gnueabihf/libQt5WebChannel.so.5 (0xad8b6000)
        libQt5Qml.so.5 => /lib/arm-linux-gnueabihf/libQt5Qml.so.5 (0xad5a3000)
        libQt5Positioning.so.5 => /lib/arm-linux-gnueabihf/libQt5Positioning.so.5 (0xad520000)
        libnss3.so => /lib/arm-linux-gnueabihf/libnss3.so (0xad430000)
        libnssutil3.so => /lib/arm-linux-gnueabihf/libnssutil3.so (0xad3f0000)
        libnspr4.so => /lib/arm-linux-gnueabihf/libnspr4.so (0xad3c8000)
        libevent-2.1.so.7 => /lib/arm-linux-gnueabihf/libevent-2.1.so.7 (0xad38e000)
        libjpeg.so.62 => /lib/arm-linux-gnueabihf/libjpeg.so.62 (0xad330000)
        libopus.so.0 => /lib/arm-linux-gnueabihf/libopus.so.0 (0xacffd000)
        libvpx.so.9 => /lib/arm-linux-gnueabihf/libvpx.so.9 (0xacef0000)
        libX11.so.6 => /lib/arm-linux-gnueabihf/libX11.so.6 (0xacde0000)
        libXcomposite.so.1 => /lib/arm-linux-gnueabihf/libXcomposite.so.1 (0xb6e4c000)
        libXdamage.so.1 => /lib/arm-linux-gnueabihf/libXdamage.so.1 (0xb6e49000)
        libXext.so.6 => /lib/arm-linux-gnueabihf/libXext.so.6 (0xacdb0000)
        libXfixes.so.3 => /lib/arm-linux-gnueabihf/libXfixes.so.3 (0xacd80000)
        libXrandr.so.2 => /lib/arm-linux-gnueabihf/libXrandr.so.2 (0xacd50000)
        libXtst.so.6 => /lib/arm-linux-gnueabihf/libXtst.so.6 (0xacd20000)
        libgio-2.0.so.0 => /lib/arm-linux-gnueabihf/libgio-2.0.so.0 (0xacbc0000)
        libgobject-2.0.so.0 => /lib/arm-linux-gnueabihf/libgobject-2.0.so.0 (0xacb60000)
        libwebp.so.7 => /lib/arm-linux-gnueabihf/libwebp.so.7 (0xacaf0000)
        libwebpmux.so.3 => /lib/arm-linux-gnueabihf/libwebpmux.so.3 (0xacac0000)
        libwebpdemux.so.2 => /lib/arm-linux-gnueabihf/libwebpdemux.so.2 (0xaca90000)
        libfreetype.so.6 => /lib/arm-linux-gnueabihf/libfreetype.so.6 (0xac9f0000)
        libexpat.so.1 => /lib/arm-linux-gnueabihf/libexpat.so.1 (0xac9b0000)
        libfontconfig.so.1 => /lib/arm-linux-gnueabihf/libfontconfig.so.1 (0xac950000)
        libharfbuzz-subset.so.0 => /lib/arm-linux-gnueabihf/libharfbuzz-subset.so.0 (0xac840000)
        libX11-xcb.so.1 => /lib/arm-linux-gnueabihf/libX11-xcb.so.1 (0xac810000)
        libxcb.so.1 => /lib/arm-linux-gnueabihf/libxcb.so.1 (0xac7f4000)
        libdbus-1.so.3 => /lib/arm-linux-gnueabihf/libdbus-1.so.3 (0xac7a0000)
        libasound.so.2 => /lib/arm-linux-gnueabihf/libasound.so.2 (0xac6d0000)
        libsnappy.so.1 => /lib/arm-linux-gnueabihf/libsnappy.so.1 (0xac6a0000)
        libxml2.so.2 => /lib/arm-linux-gnueabihf/libxml2.so.2 (0xac570000)
        libxslt.so.1 => /lib/arm-linux-gnueabihf/libxslt.so.1 (0xac520000)
        libminizip.so.1 => /lib/arm-linux-gnueabihf/libminizip.so.1 (0xb5fe7000)
        liblcms2.so.2 => /lib/arm-linux-gnueabihf/liblcms2.so.2 (0xac4c0000)
        libopenjp2.so.7 => /lib/arm-linux-gnueabihf/libopenjp2.so.7 (0xac450000)
        libQt5QmlModels.so.5 => /lib/arm-linux-gnueabihf/libQt5QmlModels.so.5 (0xac3f7000)
        libGLdispatch.so.0 => /lib/arm-linux-gnueabihf/libGLdispatch.so.0 (0xac2cf000)
        libgraphite2.so.3 => /lib/arm-linux-gnueabihf/libgraphite2.so.3 (0xac2b7000)
        libkrb5.so.3 => /lib/arm-linux-gnueabihf/libkrb5.so.3 (0xac210000)
        libk5crypto.so.3 => /lib/arm-linux-gnueabihf/libk5crypto.so.3 (0xac1c0000)
        libcom_err.so.2 => /lib/arm-linux-gnueabihf/libcom_err.so.2 (0xac190000)
        libkrb5support.so.0 => /lib/arm-linux-gnueabihf/libkrb5support.so.0 (0xac160000)
        libicudata.so.76 => /lib/arm-linux-gnueabihf/libicudata.so.76 (0xaa2d0000)
        libatomic.so.1 => /lib/arm-linux-gnueabihf/libatomic.so.1 (0xaa2a0000)
        libpcre2-8.so.0 => /lib/arm-linux-gnueabihf/libpcre2-8.so.0 (0xaa200000)
        libplc4.so => /lib/arm-linux-gnueabihf/libplc4.so (0xb5e3b000)
        libplds4.so => /lib/arm-linux-gnueabihf/libplds4.so (0xb5e37000)
        libXrender.so.1 => /lib/arm-linux-gnueabihf/libXrender.so.1 (0xaa1d0000)
        libgmodule-2.0.so.0 => /lib/arm-linux-gnueabihf/libgmodule-2.0.so.0 (0xaa1a0000)
        libmount.so.1 => /lib/arm-linux-gnueabihf/libmount.so.1 (0xaa130000)
        libselinux.so.1 => /lib/arm-linux-gnueabihf/libselinux.so.1 (0xaa0f0000)
        libffi.so.8 => /lib/arm-linux-gnueabihf/libffi.so.8 (0xaa0c0000)
        libsharpyuv.so.0 => /lib/arm-linux-gnueabihf/libsharpyuv.so.0 (0xaa090000)
        libbz2.so.1.0 => /lib/arm-linux-gnueabihf/libbz2.so.1.0 (0xb5cc3000)
        libbrotlidec.so.1 => /lib/arm-linux-gnueabihf/libbrotlidec.so.1 (0xaa060000)
        libXau.so.6 => /lib/arm-linux-gnueabihf/libXau.so.6 (0xb5e33000)
        libXdmcp.so.6 => /lib/arm-linux-gnueabihf/libXdmcp.so.6 (0xb5dfb000)
        libsystemd.so.0 => /lib/arm-linux-gnueabihf/libsystemd.so.0 (0xa9f80000)
        liblzma.so.5 => /lib/arm-linux-gnueabihf/liblzma.so.5 (0xa9f40000)
        libkeyutils.so.1 => /lib/arm-linux-gnueabihf/libkeyutils.so.1 (0xa9f10000)
        libresolv.so.2 => /lib/arm-linux-gnueabihf/libresolv.so.2 (0xa9ee0000)
        libblkid.so.1 => /lib/arm-linux-gnueabihf/libblkid.so.1 (0xa9e80000)
        libbrotlicommon.so.1 => /lib/arm-linux-gnueabihf/libbrotlicommon.so.1 (0xa9e40000)
        libcap.so.2 => /lib/arm-linux-gnueabihf/libcap.so.2 (0xa9e10000)
odio@rpi:~$ 
odio@rpi:~$ 
odio@rpi:~$ ldd FBrowser | wc -l
92

Pour info, odio est le site que j’essaie d’afficher directement en framebuffer. C’est un concurrent à Volumio qui se veut plus libre et plus transparent. :stuck_out_tongue_winking_eye:

Tu as donc bien besoin de 91 librairies et non pas 8 !
Mon avis sur FBrowser : avoir besoin de qt5 pour n’utiliser que du framebuffer, je ne verrais pas l’intérêt pour mon usage, mais l’essentiel est que ça te convienne !
On est très très loin de w3m ou lynx.

Au final certainement, mais bon nombre doivent être des librairies qui sont déjà des dépendances des 8 librairies « requises » (marquée NEEDED par la commande < objdump >).

J’imagine que c’est pour gérer la partie graphique…

Oui, mais ce sont des navigateurs en mode « texte ». Framebuffer-browser est un navigateur en mode « graphique ». :wink: