Thanks for the suggestions.
- With the mainline kernel and just a DSI monitor connected when booting, there are no
/dev/fb*
devices. - With the mainline kernel and just an HDMI monitor connected when booting, there is just
/dev/fb0
. (The HDMI monitor works in this scenario and displays a desktop.) - With the Raspberry Pi 4 kernel provided by NixOS I am always seeing
/dev/fb0
and/dev/fb1
as long as one type of display is plugged in when booting. I can successfully display images on the touchscreen usingnix-shell -p fbida
and then a command likefbi -d /dev/fb1 image.jpg
. When the touchscreen display is connected,fb0
andfb1
both correspond to it, but usingfb0
makes the red and blue channels get swapped.
So this is some good progress!
Given the results above, I think the most promising path is to use the Raspberry Pi 4 kernel provided in NixOS (i.e. boot.kernelPackages = pkgs.linuxPackages_rpi4;
). However, I’ve never gotten that kernel to display any kind of graphical desktop. In my latest attempt, I looked at the link you sent, and I converted it to this config fragment:
services.xserver = {
enable = true;
displayManager.gdm.enable = true;
desktopManager.gnome.enable = true;
drivers = [
{
name = "myfb";
driverName = "fbdev";
deviceSection = ''
Option "fbdev" "/dev/fb1"
'';
display = true;
}
];
};
By looking in /etc/systemd/system/display-manager.service
, I can tell that these new lines of Nix code were converted to the following lines in the generated xorg.conf file:
Section "Device"
Identifier "Device-myfb[0]"
Driver "fbdev"
Option "fbdev" "/dev/fb1"
EndSection
I also tried display = false;
.
But still, all I can see on the touchscreen is a text console, even if I try pressing Ctrl+Shift+Fx for every x from 1 to 12.
According to systemctl status display-manager
, the display manager service is running, but its log has warnings in it according to journalctl -xu display-manager
:
-- Boot 5a1ebe0249244df0ba86f844d8c93e18 --
May 07 19:48:11 pololupi3 systemd[1]: Starting Display Manager...
░░ Subject: A start job for unit display-manager.service has begun execution
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░
░░ A start job for unit display-manager.service has begun execution.
░░
░░ The job identifier is 97.
May 07 19:48:11 pololupi3 systemd[1]: Started Display Manager.
░░ Subject: A start job for unit display-manager.service has finished successfully
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░
░░ A start job for unit display-manager.service has finished successfully.
░░
░░ The job identifier is 97.
May 07 19:48:51 pololupi3 gdm[903]: Gdm: GdmDisplay: Session never registered, failing
May 07 19:48:51 pololupi3 gdm[903]: Gdm: Child process -1000 was already dead.
May 07 19:48:51 pololupi3 gdm[903]: Gdm: GdmDisplay: Session never registered, failing
May 07 19:48:51 pololupi3 gdm[903]: Gdm: Child process -1000 was already dead.
May 07 19:48:51 pololupi3 gdm[903]: Gdm: GdmDisplay: Session never registered, failing
May 07 19:48:51 pololupi3 gdm[903]: Gdm: Child process -1011 was already dead.
May 07 19:48:51 pololupi3 gdm[903]: Gdm: GdmDisplay: Session never registered, failing
May 07 19:48:51 pololupi3 gdm[903]: Gdm: Child process -1011 was already dead.
May 07 19:48:51 pololupi3 gdm[903]: Gdm: GdmDisplay: Session never registered, failing
May 07 19:48:51 pololupi3 gdm[903]: Gdm: Child process -1022 was already dead.
May 07 19:48:51 pololupi3 gdm[903]: Gdm: GdmDisplay: Session never registered, failing
May 07 19:48:51 pololupi3 gdm[903]: Gdm: Child process -1022 was already dead.
May 07 19:48:52 pololupi3 gdm[903]: Gdm: GdmDisplay: Session never registered, failing
May 07 19:48:52 pololupi3 gdm[903]: Gdm: Child process -1033 was already dead.
May 07 19:48:52 pololupi3 gdm[903]: Gdm: GdmDisplay: Session never registered, failing
May 07 19:48:52 pololupi3 gdm[903]: Gdm: Child process -1033 was already dead.
May 07 19:48:52 pololupi3 gdm[903]: Gdm: GdmDisplay: Session never registered, failing
May 07 19:48:52 pololupi3 gdm[903]: Gdm: Child process -1044 was already dead.
May 07 19:48:52 pololupi3 gdm[903]: Gdm: GdmDisplay: Session never registered, failing
May 07 19:48:52 pololupi3 gdm[903]: Gdm: Child process -1044 was already dead.
May 07 19:48:52 pololupi3 gdm[903]: Gdm: GdmDisplay: Session never registered, failing
May 07 19:48:52 pololupi3 gdm[903]: Gdm: GdmLocalDisplayFactory: maximum number of X display failures reached: ch>
May 07 19:48:52 pololupi3 gdm[903]: Gdm: Child process -1055 was already dead.
May 07 20:04:35 pololupi3 gdm[903]: Gdm: GdmDisplay: Session never registered, failing
May 07 20:04:35 pololupi3 gdm[903]: Gdm: GdmLocalDisplayFactory: maximum number of X display failures reached: ch>
May 07 20:04:35 pololupi3 gdm[903]: Gdm: Child process -1186 was already dead.
May 07 20:04:44 pololupi3 gdm[903]: Gdm: GdmDisplay: Session never registered, failing
May 07 20:04:44 pololupi3 gdm[903]: Gdm: GdmLocalDisplayFactory: maximum number of X display failures reached: ch>
May 07 20:04:44 pololupi3 gdm[903]: Gdm: Child process -1198 was already dead.
May 07 20:05:02 pololupi3 gdm[903]: Gdm: GdmDisplay: Session never registered, failing
May 07 20:05:02 pololupi3 gdm[903]: Gdm: GdmLocalDisplayFactory: maximum number of X display failures reached: ch>
May 07 20:05:02 pololupi3 gdm[903]: Gdm: Child process -1227 was already dead.
–David