Repository navigation
Troubleshooting
Record the core (CM4, CM5, A06 or R01), image name, kernel (uname -r),
cat /etc/os-release, and desktop/session before applying a fix. Images use
different desktop stacks; Xfce settings do not configure Labwc/Wayland.
These procedures address reported symptoms. Unless stated otherwise, they
have not yet been validated on the affected uConsole hardware.
The keyboard sends USB HID key positions, and the host layout determines which characters those positions produce. In an X11 desktop, select your layout in the desktop keyboard settings. To try it for the current X11 session:
setxkbmap -layout seUse fi, dk, or no for Finnish, Danish, or Norwegian. setxkbmap -layout us
restores the US layout for that session. On Wayland, use the compositor's
keyboard settings; setxkbmap does not configure the compositor's native
Wayland clients. On Debian-based images, sudo dpkg-reconfigure keyboard-configuration configures the system/console layout; the desktop
may have its own override.
The following base-layer mappings were verified with libxkbcommon and the installed XKB layouts, using the key positions sent by the firmware:
| Host layout | Key marked [
|
Key marked ;
|
Key marked '
|
|---|---|---|---|
| Swedish / Finnish | å | ö | ä |
| Danish | å | æ | ø |
| Norwegian | å | ø | æ |
Shift produces the uppercase letters. This enables typing those letters but does not change printed keycaps or add the extra ISO key. A physical Nordic keyboard variant still requires a hardware/keycap design from the manufacturer.
From a Linux virtual console, try the software cursor described by the Linux console documentation:
printf '\033[?17;0;64c'This requests a visible red software cursor. Restore the default with
printf '\033[?0c'. This sequence targets the Linux console, not an SSH
terminal emulator. For a persistent console-only setting, add this guard to
an existing shell login file (do not replace its other contents):
if [ "${TERM:-}" = linux ] && [ -t 1 ]; then
printf '\033[?17;0;64c'
fiApplications can reset cursor attributes. The kernel's vt.cur_default
parameter is another option, but the location of the boot command line differs
between R01 images. Inspect the image's boot configuration before editing it;
a Raspberry Pi cmdline.txt recipe does not apply automatically to the R01.
To diagnose why a desktop starts despite selecting multi-user mode, inspect:
systemctl get-default
systemctl status display-manager.service
systemctl list-dependencies multi-user.targetA desktop started by a shell profile or a custom service is independent of
the usual graphical.target dependency. Identify that launch path before
disabling services; keep a working console or SSH login available.
First identify the session and event handler:
printf '%s / %s\n' "${XDG_CURRENT_DESKTOP:-unknown}" "${XDG_SESSION_TYPE:-unknown}"
systemd-inhibit --listFor Xfce, choose Shut down for the power button in Power Manager settings. If instead you want systemd-logind to own the button, Xfce documents this per-user setting (run it as the desktop user, not through sudo):
xfconf-query -c xfce4-power-manager \
-p /xfce4-power-manager/logind-handle-power-key -n -t bool -s trueThen configure HandlePowerKey=poweroff under [Login] in a logind configuration
drop-in, such as /etc/systemd/logind.conf.d/60-uconsole-power.conf. Record the
previous setting first. Log out/in and reboot to apply the selected ownership
and logind configuration. To revert, restore the prior Xfce value (normally
false) and remove only the drop-in you added.
Changing HandlePowerKey alone can have no effect while a desktop inhibits
logind's handling of that key. This is documented in the
Xfce power-manager FAQ.
For Labwc or another desktop, inspect that desktop's bindings/power manager
instead of applying the Xfce command. A clean shutdown action is different
from forcibly cutting power by holding the button.
An available desktop menu does not establish that the kernel, firmware and hardware can suspend and resume. Inspect the capabilities without attempting suspend:
cat /sys/power/state
cat /sys/power/mem_sleep 2>/dev/null
upower -e
systemd-inhibit --listMissing battery information, unavailable suspend, and a delayed shutdown are separate symptoms. For the R01 shutdown delay, capture the previous boot's journal after a normal shutdown/reboot, if persistent logging is enabled:
journalctl -b -1 -o short-monotonic --no-pagerLook for the service or device named in a stop-job timeout. Record its unit and surrounding timestamps before changing timeout settings. Reducing all systemd stop timeouts can hide the fault and interrupt unfinished writes; it does not identify why this board takes over two minutes to shut down.
uConsole has no DevTerm fan to control. On an affected uConsole image, inspect
systemctl status devterm-fan-temp-daemon.service. If present, disable that
specific service:
sudo systemctl disable --now devterm-fan-temp-daemon.serviceDo this on the uConsole, not on an actual DevTerm. The image-building recipe
should omit the DevTerm-only fan package/service. A missing unit means this
particular workaround is unnecessary. Read-only inspection of the complete
CM4 v3.1 image found no such package or service. The available CM4 v0.1b image
also lacks the service and script, but retains a dangling enablement symlink;
systemctl disable fails when the target unit no longer exists. For that
specific stale link, verify its target with readlink, then remove the link
and reload systemd:
readlink /etc/systemd/system/multi-user.target.wants/devterm-fan-temp-daemon.service
# Expected target: /etc/systemd/system/devterm-fan-temp-daemon.service
if [ ! -e /etc/systemd/system/devterm-fan-temp-daemon.service ] &&
[ -L /etc/systemd/system/multi-user.target.wants/devterm-fan-temp-daemon.service ]; then
sudo rm -- /etc/systemd/system/multi-user.target.wants/devterm-fan-temp-daemon.service
sudo systemctl daemon-reload
fiA06 v1.1e contains a different service,
devterm-fan-temp-daemon-a06.service, whose script also configures CPU count,
CPU frequency/governor and GPU policy. It is not the script reporting the
missing Raspberry Pi vcgencmd in issue #5. If removing it from an A06 image,
first decide which CPU/GPU policy should replace those settings; do not apply
the CM4 workaround by merely substituting its unit name. See the
image inspection record.
Inspect all three views of the hostname:
hostnamectl --static
cat /etc/hostname
cat /etc/hosts
getent hosts "$(hostname)"On images using a 127.0.1.1 hostname entry, changing the static hostname
with the desktop network menu may leave the old name on that line. Back up
/etc/hosts, then use sudoedit /etc/hosts to replace the old machine name
on that entry with the new name. Preserve 127.0.0.1 localhost, IPv6 entries,
and unrelated aliases. If another service manages this file, update its
configuration instead. Verify the result with getent hosts "$(hostname)".
The inspected R01 v1.3b image instead puts uConsole-R01 beside localhost
on the 127.0.0.1 line. On that image, replace only the old machine-name
alias on that line, preserving localhost; do not assume a 127.0.1.1
entry exists.
The current CM4 pi-gen recipe writes both files when creating an image. That does not prove the R01 desktop rename action keeps them synchronized; its GUI/network-manager integration still needs reproduction on the affected OS.
Enabling a bus in raspi-config does not by itself establish which pins the
uConsole uses or whether those pins are already assigned. The pinned 6.12.62
CM4 clockworkpi-uconsole overlay enables I2C1 on GPIO44/45 for its ADC, I2C0
for the PMIC, and SPI4 with GPIO6/7 and GPIO4 chip select. The panel also uses
GPIO8 for reset and GPIO9 for backlight control. These are SoC GPIO numbers,
not expansion-connector pin numbers. The CM5 overlay differs; do not copy
CM4 pin assignments to CM5.
Inspect the active device tree and device nodes before choosing an expansion bus:
ls -l /dev/i2c-* /dev/spidev*
ls /sys/class/i2c-adapter
ls /sys/bus/spi/devicesCompare the selected peripheral/pins with the board schematic and the active
config.txt overlays. If debugfs is mounted, the pinctrl pinmux-pins files
under /sys/kernel/debug/pinctrl/ can identify pin owners. Do not repurpose
PMIC, panel, or backlight pins based on a generic Raspberry Pi pinout. The
current source enables buses; proving the reported external peripheral works
still requires its wiring, requested bus, and actual image configuration.
The current panel-cwu50 driver exposes a native 720 by 1280 mode and a panel
orientation property; the CM4 overlay sets rotation = <90>. A desktop can
honor that property while a program using DRM/GBM directly handles rotation
differently. First record the Kodi version and display backend, and compare
Kodi's behavior with the desktop on the same image.
For an X11 session, xrandr --query shows the desktop output configuration.
For Wayland, use the compositor's output settings. Direct DRM/GBM Kodi does
not inherit X11 xrandr settings. Avoid applying multiple rotation changes
to the kernel, console and desktop at once: identify the backend and change
one layer, then verify touch/pointer coordinates and the application display.
The old v1.3g image from the issue still needs reproduction; the current
kernel's orientation metadata alone is not proof that Kodi is fixed.