4.3 KiB
Duel head
Display
- Hardkernel 3.2" tft lcd
- Generic HDMI monitor
Configuration
Package
sudo apt install gnome-icon-theme weston=9.0.0-4ubuntu1
The package gnome-ichone-theme is used for weston shortcut icon.
UDev /etc/udev/rules.d/99-weston.rules
odroid@gnome-desktop:~$ cat /etc/udev/rules.d/99-weston.rules
ACTION=="add|change", SUBSYSTEM=="drm", DEVPATH=="/devices/platform/soc/fe000000.apb4/fe050000.spi/spi_master/spi0/spi0.0/drm/card1", ENV{ID_SEAT}="seat-weston"
#SUBSYSTEM=="graphics", ENV{ID_FOR_SEAT}=="graphics-platform-fe050000_spi-cs-0", ENV{ID_SEAT}="seat-weston"
ACTION=="add|change", SUBSYSTEM=="input", ENV{ID_FOR_SEAT}=="input-platform-fe050000_spi-cs-1", ENV{ID_SEAT}="seat-weston"
ACTION=="add|change", SUBSYSTEM=="input", KERNEL=="event[0-9]*", ENV{ID_INPUT_TOUCHSCREEN}=="1", OWNER="odroid", ENV{LIBINPUT_CALIBRATION_MATRIX}="1.366975 0.036143 -0.072346 -0.092563 -2.159515 1.082110"
The key is to set ID_SEAT on the device to be separated. In the example above, it was set to seat-weston.
Simply set ID_SEAT on at least one graphics output device and the input device you want to isolate. also, set the touch calibration values.
If ID_SEAT set, GDM and ubuntu desktop not use these devices. (They use seat0 - default)
weston.ini /etc/xdg/weston/weston.ini
odroid@gnome-desktop:~$ cat /etc/xdg/weston/weston.ini
[core]
require-input=false
locking=false
idle-time=0
#gbm-format=abgr8888
#repaint-window=16
background-color=0x00ffffff
background-type=scale
panel-position=none
startup-animation=none
close-animation=none
[shell]
background-color=0xff002244
clock-format=minutes
locking=false
[libinput]
touchscreen_calibrator=true
calibration_helper=/usr/bin/save-calibration
[launcher]
path=/usr/bin/weston-terminal
icon=/usr/share/icons/gnome/24x24/apps/utilities-terminal.png
[launcher]
path=/root/tc
icon=/usr/share/icons/gnome/24x24/apps/utilities-terminal.png
[launcher]
path=/usr/bin/weston-simple-egl
icon=/usr/share/icons/gnome/24x24/apps/utilities-terminal.png
#[input-method]
#path=/usr/libexec/weston-keyboard
#[xwayland]
#path=/usr/bin/Xwayland
#[autolaunch]
#path=/usr/share/odroid-kiosk-weston/weston-autostart.sh
#watch=true
[output]
name=UNNAMED-1
mode=320x240
ui-size=320x240
priority=9
seat=seat-weston
The key is seat=seat-weston in section [output]. Set the seat used for display.
In weston9, the SPI-1 device is recognized as UNNAMED-1, so we set it to UNNAMED-1.
Systemd
Socket /etc/systemd/system/weston.socket
odroid@gnome-desktop:~$ cat /etc/systemd/system/weston.socket
[Unit]
Description=Weston, a Wayland compositor
[Socket]
ListenStream=%t/weston-0
Service
odroid@gnome-desktop:~$ cat /etc/systemd/system/weston.service
[Unit]
# Make sure we are started after logins are permitted.
Description=Weston Wayland compositor startup
Requires=systemd-user-sessions.service
After=systemd-user-sessions.service
After=plymouth-quit-wait.service
Wants=dbus.socket
After=dbus.socket
Requires=weston.socket
RequiresMountsFor=/run
After=getty@tty7.service
Conflicts=getty@tty7.service plymouth-quit.service
Before=graphical.target
ConditionPathExists=/dev/tty0
[Service]
Type=notify
StandardInput=tty
UtmpIdentifier=tty7
User=root
#Group=odroid
EnvironmentFile=-/etc/default/weston
Environment="XDG_RUNTIME_DIR=/run/user/0"
Environment="DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus"
#Environment=XDG_SEAT=seat-weston
Environment=XDG_SESSION_CLASS=user
#Environment=XDG_SESSION_TYPE=wayland
#Environment=XDG_SESSION_DESKTOP=weston
#Environment=HOME=/home/odroid
#Environment=SEATD_VTBOUND=0
PAMName=login
TTYPath=/dev/tty7
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
StandardInput=tty-fail
StandardOutput=journal
StandardError=journal
UtmpIdentifier=tty7
UtmpMode=user
ExecStart=/usr/bin/weston --log=/home/odroid/weston.log --seat=seat-weston --drm-device=card1 --socket=weston-0 --tty=7 --modules=systemd-notify.so
[Install]
WantedBy=graphical.target
In ExecStart...
SPI Display's DRM device name is card-1, so must set --drm-device=card1
Create a socket weston-0(weston.socket) and set it(--socket=weston-0) so that it does not overlap with sockets on the existing Ubuntu desktop.
TODO
- Run weston without root