Ubuntu 16.04 Host, Buildroot 2017.02
Aktuelles Buildroot hat ein X11-Paket, das es uns "einfach" macht: https://github.com/buildroot/buildroot/tree/2016.05/package/x11r7
Dieses Repo erstellt das gesamte System für Sie in einem einzigen Befehl: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/b134f3958884ce1fce2dd9d31d19ab0c0fbe9089#x11
Alternativ finden Sie hier eine vorgefertigte .config
Datei: https://github.com/cirosantilli/buildroot-configs/blob/44b45b5c7f68e44abcda360a2b980f8301901a9a/qemu_x86_64_x11_defconfig
Dies ist die minimale X11-spezifische Konfiguration, mit der ich durchgekommen bin:
BR2_PACKAGE_XAPP_TWM=y
BR2_PACKAGE_XAPP_XCALC=y
BR2_PACKAGE_XAPP_XCLOCK=y
BR2_PACKAGE_XAPP_XEYES=y
BR2_PACKAGE_XAPP_XINIT=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_KEYBOARD=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_MOUSE=y
BR2_PACKAGE_XDRIVER_XF86_VIDEO_CIRRUS=y
BR2_PACKAGE_XDRIVER_XF86_VIDEO_FBDEV=y
BR2_PACKAGE_XDRIVER_XF86_VIDEO_VESA=y
BR2_PACKAGE_XORG7=y
BR2_PACKAGE_XSERVER_XORG_SERVER=y
BR2_PACKAGE_XTERM=y
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_TOOLCHAIN_BUILDROOT_WCHAR=y
BR2_USE_WCHAR=y
So können Sie diese Optionen zu Ihren vorhandenen hinzufügen .config
: Ist es möglich, Konfigurationsfragmente mit Buildroots .config zu verwenden? | Paketüberfluss
Wie ich die Optionen herausgefunden habe : make menuconfig
, Suche nach Optionsnamen mit /
und arbeite dann rückwärts dependes
von xeyes
.
Leider müssen Sie immer noch wissen, was Sie tun, hauptsächlich aufgrund von Situationen, in denen zwei verschiedene Pakete eine Schnittstelle implementieren (z. B. X.Org Modular vs KDrive, die beide einen X11-Server implementieren) und standardmäßig keines ausgewählt ist.
Dieser Artikel hat sehr geholfen:
Erstellen eines winzigen X.Org Linux-Systems mit Buildroot | agentoss.wordpress.com
Dann einfach das Übliche:
make BR2_JLEVEL=$(nproc)
qemu-system-x86_64 \
-enable-kvm \
-M pc \
-m 512 \
-kernel output/images/bzImage \
-drive file=output/images/rootfs.ext2,if=virtio,format=raw \
-append root=/dev/vda \
-net nic,model=virtio \
-net user
Und von innen QEMU:
root
startx
Bildgröße: 28M.
Ergebnis
Ein archaisches X11-System!
Und es verhält sich genauso wie in diesem Video: https://upload.wikimedia.org/wikipedia/commons/transcoded/5/52/TWM_without_configuration.ogv/TWM_without_configuration.ogv.480p.webm
Insbesondere verfügt dieser archaische Fenstermanager nicht über eine X-Schaltfläche zum Schließen in den Menüleisten: Sie mussten:
- Klicken Sie auf den Desktop
- Wählen Sie "töten" aus einem Menü
- Wählen Sie das Fenster aus, das Sie beenden möchten
startx
geht dann weiter /etc/X11/xinit/xinitrc
zu xinit
, was es nach dem Start der GUI aufruft. Die Standardeinstellung xinitrc
enthält:
twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &
exec xterm -geometry 80x66+0+0 -name login
Dadurch wird unser Fenstermanager gestartet twm
(versuchen Sie, ihn für einen der anderen Manager zu ändern, für die Buildroot Pakete enthält) und die Programme, die auf dem Bildschirm angezeigt werden. TODO was ist das für ein exec xterm
Teil? Warum das exec
?
x11vnc
Wenn Sie vom Emulator zu einem realen Gerät wechseln, müssen x11vnc
Sie kein Display kaufen: Es öffnet den Bildschirm als Fenster in Ihrem Host und kann sogar Mausklicks an das Gerät senden.
Aktivieren Sie das x11vnc
Paket auf Buildroot und erstellen Sie es neu.
Verwenden Sie die folgenden Optionen, um zuerst auf QEMU zu testen (siehe auch SSH vom Host zum Gast mithilfe von QEMU? | Unix & Linux Stack Exchange
):
-net nic,model=virtio \
-net user,hostfwd=tcp::5901-:5900
dann auf Gast startx
und laufen:
x11vnc
Und zurück zum Gastgeber:
sudo apt-get install vinagre
vinagre localhost::5901
Ergebnis:
- links QEMU mit X11, x11vnc und glmark2
- rechts vinagre auf host, zeigt genau das gleiche
- Ich kann auf eines der beiden klicken und mit ihnen interagieren, und die anderen werden sofort aktualisiert
Siehe auch: Wie richte ich Raspberry Pi ohne Monitor ein? | Raspberry Pi Stack Exchange
Display Manager (fehlgeschlagener Versuch)
Wenn Sie das Terminal vollständig vergessen möchten, aktivieren Sie auch:
- Zielpakete
- Grafikbibliotheken und Anwendungen
X.Org X Window System
: beide klicken y
und dann enter
hineingehen
X11R7 Applications
xconsole
( xdm
standardmäßig ausgeführt)
xdm
Wenn Sie nun QEMU starten, wird ein grafischer Anmeldebildschirm wie "moderne" Distributionen angezeigt:
TODO: kann sich nicht anmelden. Benutzername root
/ leeres Passwort funktionierte für mich bei einem anderen Test mit ALLEN installierten X11-Paketen. xdm
Wenn Sie Protokolle unterlegen /var/log/xdm.log
, erhalten Sie eine TTY-Shell, mit der Sie sie überprüfen können: Wie kann ich mit Strg-Alt-F # in einer QEMU-Sitzung zu einem TTY gelangen? | Fragen Sie Ubuntu
Die Anrufkette, mit der der Display Manager gestartet wird, lautet:
/init
(bereitgestellt von BusyBox)
/etc/inittab
Linie ::sysinit:/etc/init.d/rcS
/etc/init.d/rcS
/etc/init.d/S99xdm
/usr/bin/xdm