Hardware known to work with KlipperScreen

KlipperScreen can work with any display that will interact with a raspberry pi (HDMI, DSI, or GPIO). Feel free to post your success stories with hardware as other users may need help with figuring out which screen to buy.

Here are some links to known working screens:

BTT PI TFT50
Raspberry PI 7" Touchscreen

Generic 7" HDMI Touch Screen

I am currently running a screen very similar to this one on my printer. I say “similar” because you really can’t say “this exact one” since these generic screens come and go all the time on ali/amazon/banggood/wherever.

This particular touch screen has a single HDMI input, a micro USB connector for power, a micro USB connector to connect to a pi/pc/usb hub, and then two USB A connectors on board that you can connect thumb drives, mice, keyboards, whatever… into. The touch screen portion of it is pretty decent but it has issues on the corners picking up touches even after calibration.

pretty simple and cheap touch display with GPIO connection

I bench tested a Kuman 3.5" screen this weekend. It appears to be identical to the Elegoo linked above. It works, but with the small screen and low resolution text is a bit difficult to read in KlipperScreen.

Kuman 3.5" Touchscreen

5inch HDMI Display-B - LCD wiki working fine here

I got the VOCORE Screen running. But only in portrait mode.
startx shows an error if i set the rotate option.
It is nice to connect it simply with USB.

I got the VoCore working now.

#Update system and kernel
sudo apt-get update
sudo apt-get upgrade
sudo reboot
#install kernel-headers
sudo apt install raspberrypi-kernel-headers

#get vocore ande compile the driver
#use /temp to free the space after reboot.
cd /tmp
wget https://github.com/Vonger/vocore2/archive/refs/heads/master.zip
unzip master.zip
cd /tmp/vocore2-master/utils/fbusb/src
#make vocore driver
make -C /usr/src/linux-headers-$(uname -r ) M=$PWD modules
sudo insmod fbusb.ko
sudo cp fbusb.ko /lib/modules/$(uname -r)/kernel/drivers/

#Add fbusb.ko to load.d
sudo nano /etc/modules-load.d

#1. set screen to black: 
dd if=/dev/zero of=/dev/fb1 bs=1000 count=768

#2. set screen to random pixel: 
dd if=/dev/urandom of=/dev/fb1 bs=1000 count=768

#Set Console output to LCD
#add fbcon=map:10 to cmdline.txt
sudo nano /boot/cmdline.txt

#Test console
sudo FRAMEBUFFER=/dev/fb1 startx

#https://klipperscreen.readthedocs.io/en/latest/Installation/
#KlipperScreen Installation
cd ~/
git clone https://github.com/jordanruthe/KlipperScreen.git
cd ~/KlipperScreen
./scripts/KlipperScreen-install.sh

#remove fbturbo and use fbdev
sudo rm /usr/share/X11/xorg.conf.d/99-fbturbo.conf

sudo nano /usr/share/X11/xorg.conf.d/99-fbdev.conf
#Add this text ans save
Section "Device"
	Identifier "LCD"
	Driver "fbdev"
	Option "fbdev" "/dev/fb1"
	Option "Rotate" "CW"
	Option "SwapbuffersWait" "true"
EndSection

#Rotate the touch input too
sudo nano /etc/udev/rules.d/51-touchscreen.rules
#add to file
ACTION=="add", ATTRS{name}=="VoCore Touch", ENV{LIBINPUT_CALIBRATION_MATRIX}="0 1 0 -1 0 1 0 0 1"

#In the KlipperScreen documentation is this metioned to test the touch rotation.
DISPLAY=:0 xinput set-prop "VoCore Touch" 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1
#But the /51-touchscreen.rules changes the 'libinput Calibration Matrix' and not 'Coordinate Transformation Matrix'.
#but you can test the 'libinput Calibration Matrix' as well.
DISPLAY=:0 xinput set-prop "VoCore Touch" 'libinput Calibration Matrix' 0 1 0 -1 0 1 0 0 1

Hello,

you can use any kind of smartphone/android device running xsdl.

I run it an old HTC Desire S (Android 4.2.2) and Samsung A3 2015 (lineageos 15).

Either you use the wlan connection or you can enable usb debug on your android device. I wrote a small shell script that is launched by systemd instead of launching klipperscreen directly-

#!/bin/bash
# forward local display :100 to remote display :0
adb forward tcp:6100 tcp:6000

adb shell dumpsys nfc | grep 'mScreenState=' | grep OFF_LOCKED > /dev/null 2>&1
if [ $? -lt 1 ]
then
    echo "Screen is OFF and Locked. Turning screen on..."
    adb shell input keyevent 26
fi

adb shell dumpsys nfc | grep 'mScreenState=' | grep ON_LOCKED> /dev/null 2>&1
if [ $? -lt 1 ]
then
    echo "Screen is Locked. Unlocking..."
    adb shell input keyevent 82
fi

# start xsdl
adb shell am start-activity x.org.server/.MainActivity

ret=1
timeout=0
echo -n "Waiting for x-server to be ready "
while [ $ret -gt 0 ] && [ $timeout -lt 60 ]
do
    xset -display :100 -q > /dev/null 2>&1
    ret=$?
    timeout=$( expr $timeout + 1 )
    echo -n "." 
    sleep 1
done
echo ""
if [ $timeout -lt 60 ]
then
    DISPLAY=:100 /home/pi/.KlipperScreen-env/bin/python screen.py
    exit 0
else
    exit 1
fi

and here is the changed systemd service:

[Unit]
Description=KlipperScreen
After=moonraker.service
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=pi
WorkingDirectory=/home/pi/KlipperScreen
ExecStart=/home/pi/KlipperScreen/lauch_klipperscreen.sh

[Install]
WantedBy=multi-user.target
2 Likes

WAVESHARE 4.3 inch DSI LCD works like charm. Without any additional settings needed.
https://www.waveshare.com/4.3inch-dsi-lcd.htm