Display

From postmarketOS Wiki
Icon This page could use some expansion. If you'd like to help out, feel free to edit this article!
In particular: All of this is Xorg-related. Move relevant bits to Xorg and rewrite.

Landscape mode

All these fixes need device reboot.

Rotate the screen

You can rotate adding the following configuration file: /etc/X11/xorg.conf.d/00-fbdev-rotate.conf

Section "Device"
  Identifier "LCD"
  Driver "fbdev"
  Option "Rotate" "CW"
EndSection

Valid values for "Rotate" are "CW" (clockwise, 90 degrees), "UD" (upside down, 180 degrees) and "CCW" (counter clockwise, 270 degrees), see fbdev(4) man page.

Reboot, then open the display app and set the correct resolution.

Rotate the touchscreen

In order to also rotate the touchscreen you need to add an udev rule.

First, list your device with

libinput list-devices

look for your touchscreen, it should look something like this:

Device:           Elan Touchscreen
Kernel:           /dev/input/event0
Group:            1
Seat:             seat0, default
Capabilities:     touch 
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      0.00 1.00 0.00 -1.00 0.00 1.00
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Accel profiles:   n/a
Rotation:         n/a

now, get the device name from udevadm (change event0 according to the Kernel output before):

udevadm info -a -p /sys/class/input/event0

in the output find your touchscreen, copy the exact ATTRS{name} line:

looking at parent device '/devices/soc0/7000c400.i2c/i2c-1/1-0010/input/input0':
    KERNELS=="input0"
    SUBSYSTEMS=="input"
    DRIVERS==""
    ATTRS{uniq}==""
    ATTRS{properties}=="2"
    ATTRS{phys}==""
    ATTRS{name}=="Elan Touchscreen"

create a new udev file under:

/etc/udev/rules.d/98-touchscreen-cal.rules

Add the ATTRS{name} line you copied with a comma:

ATTRS{name}=="Elan Touchscreen",

And add one of the following lines after the comma:

# Left - 90 degree clockwise
ENV{LIBINPUT_CALIBRATION_MATRIX}="0 -1 1 1 0 0"
# 180 degree clockwise
ENV{LIBINPUT_CALIBRATION_MATRIX}="-1 0 1 0 -1 1"
# Right - 270 degree clockwise
ENV{LIBINPUT_CALIBRATION_MATRIX}="0 1 0 -1 0 1"
# reflect along y axis
ENV{LIBINPUT_CALIBRATION_MATRIX}="-1 0 1 1 0 0"

So you end up with something like this:

ATTRS{name}=="Elan Touchscreen", ENV{LIBINPUT_CALIBRATION_MATRIX}="0 1 0 -1 0 1"

Reboot your device and you are good to go. (a force reload of udevadm isn't enough!)

Note: If you use the rotate screen code as it is, use the # Right option to rotate the touch on the direction of rotated screen.

Scaling

Xfce4 and Mate Desktop supports gtk apps scaling out of the box. As for Qt apps, you need to set up environment variables by

sudo nano /etc/environment

and pasting these lines after comments

QT_SCALE_FACTOR=2
QT_AUTO_SCREEN_SCALE_FACTOR=2

Display Power Management

To control display from a terminal, first set DISPLAY environment variable:

export DISPLAY=:0.0

The xset command can be used to turn display on and off, or set a display timeout value.

xset dpms force off    # To turn off display
xset dpms force on     # To turn the display back on
xset q                 # Prints current display status info

Troubleshooting

Check the logs with logread -f | grep x11 or see the dedicated Troubleshooting page