成功使用logind+lightdm实现了双卡双头多座(multiseat),可以用sunshine串流打小游戏。
用了差不多快一周(净时间,实际两三周),太久了,在此留下记录以免未来的昔日自己栽坑。不过现在我妹在用该电脑打游戏,我也先写个作业,待会再写![]()
成功使用logind+lightdm实现了双卡双头多座(multiseat),可以用sunshine串流打小游戏。
用了差不多快一周(净时间,实际两三周),太久了,在此留下记录以免未来的昔日自己栽坑。不过现在我妹在用该电脑打游戏,我也先写个作业,待会再写![]()
我安装了Nvidia显卡,可能是n卡驱动的x配置文件会强行使用n卡,我的seat1 使用lightdm时黑屏。所以必须为seat1做单独的x配置(例如单开一文件设置Section "Device"并为核显设置modesetting驱动),并在lightdm配置中的[Seat:对应seat名]中加载,我的配置放在lightdm启动x的参数了(可参考 lightdm/data/lightdm.conf at main · canonical/lightdm · GitHub)
配置多座就比较简单,较好的参考有Multi_Seat_Debian_HOWTO - Debian Wiki,但一定要为sunshine的虚拟输入配置udev规则然后重启来分配
我现在在外回不了家,暂不能展示x和udev配置,回去发这些。
这些是相关的配置文件,配置过程问ai很多,不免有冗赘,欢迎指出
/usr/share/lightdm/lightdm.conf.d/logind-seats.conf (lightdm配置,我觉得放在这里不是最好的) :
[LightDM]
logind-load-seats=true
logind-check-graphical=true
[Seat:seat1]
xserver-command=/usr/bin/X -config /etc/X11/conf.per-seats/90-seat1.conf
/etc/X11/conf.per-seats/90-seat1.conf (seat1的X配置,放的地方能访问到应该都行) :
Section "Device"
Identifier "card0"
Driver "modesetting"
BusID "PCI:0:2:0"
EndSection
loginctl seat-status结果:
~> loginctl seat-status seat1
seat1
Sessions: *6
Devices: n/a
├─/sys/devices/pci0000:00/0000:00:02.0/drm/card1
│ [MASTER] drm:card1
│ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-HDMI-A-1
│ │ [MASTER] drm:card1-HDMI-A-1
│ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-HDMI-A-2
│ │ [MASTER] drm:card1-HDMI-A-2
│ └─/sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-VGA-1
│ [MASTER] drm:card1-VGA-1
├─/sys/devices/pci0000:00/0000:00:02.0/drm/renderD128
│ drm:renderD128
├─/sys/devices/pci0000:00/0000:00:14.0/usb3/3-11
│ usb:3-11
│ ├─/sys/devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/0003:18F8:1286.0002/hidraw/hidraw1
│ │ hidraw:hidraw1
│ ├─/sys/devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/0003:18F8:1286.0002/input/input6
│ │ input:input6 "INSTANT USB GAMING MOUSE "
│ ├─/sys/devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.1/0003:18F8:1286.0003/hidraw/hidraw2
│ │ hidraw:hidraw2
│ └─/sys/devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.1/0003:18F8:1286.0003/input/input7
│ input:input7 "INSTANT USB GAMING MOUSE Keyboard"
└─/sys/devices/platform/i8042/serio0/input/input0
input:input0 "AT Translated Set 2 keyboard"
├─/sys/devices/platform/i8042/serio0/input/input0/input0::capslock
│ leds:input0::capslock
├─/sys/devices/platform/i8042/serio0/input/input0/input0::numlock
│ leds:input0::numlock
└─/sys/devices/platform/i8042/serio0/input/input0/input0::scrolllock
leds:input0::scrolllock
/etc/udev/rules.d/99-sunshine-vinputs-could-attach.rules (udev规则,把sunshine的虚拟输入分给seat1(loginctl分配会因没有tag失败)) :
SUBSYSTEM=="input", \
ENV{PRODUCT}=="3/beef/dead/111", \
ENV{NAME}=="*passthrough*", \
ENV{ID_FOR_SEAT}="sunshine-vinput-%k", \
ENV{ID_SEAT}="seat1"
写udev规则时注意"==“是匹配而”="会赋值
sunshine的虚拟输入的udevadm info结果,一般找到关键词扔进rules.d匹配即可:
~> udevadm info -q property /sys/devices/virtual/input/input*/
DEVPATH=/devices/virtual/input/input78
PRODUCT=3/beef/dead/111
NAME="Mouse passthrough"
PROP=0
EV=17
KEY=ff0000 0 0 0 0
REL=1943
MSC=10
MODALIAS=input:b0003vBEEFpDEADe0111-e0,1,2,4,k110,111,112,113,114,115,116,117,r0,1,6,8,B,C,am4,lsfw
SUBSYSTEM=input
USEC_INITIALIZED=9295994415
ID_INPUT=1
ID_INPUT_MOUSE=1
ID_SERIAL=noserial
ID_FOR_SEAT=sunshine-vinput-input78
ID_SEAT=seat1
TAGS=:seat:
CURRENT_TAGS=:seat:
DEVPATH=/devices/virtual/input/input79
PRODUCT=3/beef/dead/111
NAME="Mouse passthrough (absolute)"
PROP=2
EV=b
KEY=10000 0 0 0 0
ABS=3
MODALIAS=input:b0003vBEEFpDEADe0111-e0,1,3,k110,ra0,1,mlsfw
SUBSYSTEM=input
USEC_INITIALIZED=9295994617
ID_INPUT=1
ID_INPUT_MOUSE=1
ID_SERIAL=noserial
ID_FOR_SEAT=sunshine-vinput-input79
ID_SEAT=seat1
TAGS=:seat:
CURRENT_TAGS=:seat:
DEVPATH=/devices/virtual/input/input80
PRODUCT=3/beef/dead/111
NAME="Keyboard passthrough"
PROP=0
EV=3
KEY=a00000000 0 40000 4400 ee80ffde25cfffff fffffffffffffffe
MODALIAS=input:b0003vBEEFpDEADe0111-e0,1,k77,79,7A,7B,7D,7E,7F,8A,8E,D2,161,163,ramlsfw
SUBSYSTEM=input
USEC_INITIALIZED=9295994831
ID_INPUT=1
ID_INPUT_KEY=1
ID_INPUT_KEYBOARD=1
ID_SERIAL=noserial
ID_FOR_SEAT=sunshine-vinput-input80
ID_SEAT=seat1
TAGS=:seat:
CURRENT_TAGS=:seat:
声音我还没有去处理,目前seat1会处于完全无音频状态而sunshine会去抓seat0(主板声卡)的音频