我已經設定了一台帶有兩個 NVidia 顯示卡的機器:
$ lspci
01:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GT 740] (rev a1)
02:00.0 VGA compatible controller: NVIDIA Corporation GK208 [GeForce GT 730] (rev a1)
然後,我習慣loginctl
將 GT 730 分配給 Seat-1,而 GT 740 保持不變,因此它仍然分配給 Seat0。 Seat0 有兩台顯示器, Seat-1 只有一台。
使用新風格
使用nouveau
XOrg 驅動程序,我可以使用兩個席位。兩個座位均顯示lightdm
登入畫面並允許登入。
這裡有兩個問題:
- Seat0 頻繁鎖定,顯然僅在會話鎖定時才發生。滑鼠仍然會移動,但不接受鍵盤輸入。甚至時鐘也停止更新。
- 這可以透過 ssh 進入盒子或登入 Seat-1 並簡單地重新啟動 lightdm (
service lightdm restart
) 來解決,但顯然這會註銷兩個席位,這充其量是不方便的。 dmesg | grep nouveau
顯示一些訊息,例如nouveau 0000:01:00.0: fifo: SCHED_ERROR 08 []
或nouveau 0000:01:00.0: Xorg[1250]: channel 2 killed!
- 這可以透過 ssh 進入盒子或登入 Seat-1 並簡單地重新啟動 lightdm (
- Seat-1 在捲動時顯示閃爍,例如在網頁中。根據說法,這可能是因為視訊記憶體頻寬太低Nouveau 故障排除 - 顯示器空白、閃爍、雪花或其他隨機即時影像損壞。我還沒有調查過這個。
使用專有的 NVidia 驅動程式
當我安裝專有的 nvidia 驅動程式 ( apt install nvidia-384
) 時,只有 GT 740(分配給 Seat0,配備兩個顯示器)可用。 GT 730 上的另一個顯示器(分配給 1 號座位,配備一台顯示器)可保持黑色。
然而,好的一面是,我在 Seat0 上沒有遇到更多的鎖定(並且在 Seat-1 上顯然不再有閃爍,儘管這並不是真正的改進;-))
我還嘗試使用硬體驅動程式設定應用程式或ubuntu-drivers
在控制台上切換到驅動程式。兩者都只列出了一張NVidia卡,即GT 740:
$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:02.0/0000:01:00.0 ==
modalias : pci:v000010DEd00000FC8sv00001458sd000036FFbc03sc00i00
vendor : NVIDIA Corporation
model : GK107 [GeForce GT 740]
driver : nvidia-384 - distro non-free recommended
driver : nvidia-340 - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
== cpu-microcode.py ==
driver : amd64-microcode - distro non-free
結論
我的目標是讓兩個座位都運行,不鎖定,不閃爍。我並不關心這是使用 nouveau 還是 nvidia 驅動程式實現的。
我目前沒有 Xorg.conf 或修改過 lightdm 配置,因為我根本不知道該放什麼...我想只要讓 nvidia 驅動程式識別第二張卡就可以解決問題,但我不知道如何實現這一點。
有任何想法嗎?
預先感謝,派崔克
答案1
好吧,我終於成功了。
一般的
這一部分對其他人來說是一個小“入門”,對我自己來說是一個小“備忘錄”......這不是唯一的,甚至可能不是最好的方法,這只是我所做的方式它。
- 準備兩個 USB 集線器,並在兩個座位上各放置一個。將它們插入機器的兩個 USB 連接埠。
- 取得一個 USB 音效卡(一個有一個麥克風輸入和一個線路輸出連接器的小型 USB 轉接器)並將其插入電腦的另一個 USB 連接埠。假設已經有另一個(機上)聲音設備要在 Seat0 上使用。
- 取得兩個 USB 無線滑鼠/鍵盤組合,並將一個 USB 轉接器插入兩個 USB 集線器中的每一個。
- 將集線器分配給對應的座位 (
loginctl attach seat1 /dev/...
)。這會自動指派插入集線器的滑鼠和鍵盤。 - 將 USB 音效卡分配給 Seat1
- 將其中一張 Nvidia 卡(所有卡,包括 DRM 和聲音設備)分配給 Seat1。
- 如果您還有任何其他裝置未插入已指派的集線器,請也指派它們。
跑步
loginctl seat-status seat1
。這是這裡的樣子:seat1 Sessions: *c3 Devices: ├─/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.0/drm/card1 │ [MASTER] drm:card1 ├─/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.0/drm/renderD129 │ drm:renderD129 ├─/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.1/sound/card2 │ sound:card2 "NVidia" │ ├─/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.1/sound/card2/input20 │ │ input:input20 "HDA NVidia HDMI/DP,pcm=3" │ └─/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.1/sound/card2/input21 │ input:input21 "HDA NVidia HDMI/DP,pcm=7" ├─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb8 │ usb:usb8 │ ├─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb8/8-1 │ │ usb:8-1 │ │ ├─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb8/8-1/8-1.3 │ │ │ usb:8-1.3 │ │ ├─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb8/8-1/8-1.4/8-1.4:1.0/0003:046A:B102.0004/input/input5 │ │ │ input:input5 "HOLTEK USB Wireless Device" │ │ └─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb8/8-1/8-1.4/8-1.4:1.1/0003:046A:B102.0005/input/input6 │ │ input:input6 "HOLTEK USB Wireless Device" │ └─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb8/8-2 │ usb:8-2 │ └─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb8/8-2/8-2.3 │ usb:8-2.3 ├─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb9 │ usb:usb9 │ ├─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb9/9-1 │ │ usb:9-1 │ │ └─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb9/9-1/9-1.3 │ │ usb:9-1.3 │ └─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb9/9-2 │ usb:9-2 │ └─/sys/devices/pci0000:00/0000:00:04.0/0000:03:00.0/usb9/9-2/9-2.3 │ usb:9-2.3 ├─/sys/devices/pci0000:00/0000:00:12.0/usb4 │ usb:usb4 │ ├─/sys/devices/pci0000:00/0000:00:12.0/usb4/4-4/4-4:1.0/sound/card5 │ │ sound:card5 "Device" │ └─/sys/devices/pci0000:00/0000:00:12.0/usb4/4-4/4-4:1.3/0003:0D8C:0014.0001/input/input2 │ input:input2 "C-Media Electronics Inc. USB Audio Device" └─/sys/devices/pci0000:00/0000:00:12.2/usb1 usb:usb1 ├─/sys/devices/pci0000:00/0000:00:12.2/usb1/1-2 │ usb:1-2 ├─/sys/devices/pci0000:00/0000:00:12.2/usb1/1-3/1-3:1.0/input/input15 │ input:input15 "UVC Camera (046d:0807)" ├─/sys/devices/pci0000:00/0000:00:12.2/usb1/1-3/1-3:1.0/video4linux/video0 │ video4linux:video0 "UVC Camera (046d:0807)" ├─/sys/devices/pci0000:00/0000:00:12.2/usb1/1-3/1-3:1.2/sound/card3 │ sound:card3 "U0x46d0x807" └─/sys/devices/pci0000:00/0000:00:12.2/usb1/1-5 usb:1-5
新風格
我不知道如何處理使用 nouveau 驅動程式時 Seat1 上的螢幕閃爍和 Seat0 上的鎖定問題。如果您正在尋找解決這個問題的方法,那麼可能值得一看 https://wiki.archlinux.org/index.php/Xorg_multiseat其中說:
為了避免撕裂,這似乎對幾乎所有配置都有幫助 - 將其添加到 /etc/environment 中:
CLUTTER_PAINT=disable-clipped-redraws:disable-culling
CLUTTER_VBLANK=True
另一個提示是將使用者新增至群組中video
,否則他們可能無法存取 DRI 介面。
這就是我能說的全部,我轉而使用 Nvidia 二進位驅動程式。
英偉達
我遇到的問題顯然是 Seat0 的 X 伺服器以某種方式試圖控制兩個 GPU,即使 GPU-1 已分配給 Seat1。
這不知何故混淆了 X 螢幕,並且 1 號座位的 X 伺服器找不到任何可用的螢幕。
我花了幾個小時擺弄/etc/X11/xorg.conf.d
文件,在其中放置了一些小配置,例如
Section "Device"
Identifier "graphic0"
Driver "nvidia"
Option "NoLogo"
BusId "PCI:1:0:0"
MatchSeat "seat-1"
Option "Monitor-DVI-1" "monitor1"
EndSection
和
Section "ServerLayout"
Identifier "seat-1"
Screen "screen1" 0 0
InputDevice "mouse1" "CorePointer"
InputDevice "keyboard1" "CoreKeyboard"
Option "Seat" "seat-1"
Option "SingleCard" "on"
EndSection
據建議https://wiki.archlinux.org/index.php/Xorg_multiseat(那裡有很多有用的信息,儘管它沒有解決我的問題)或https://devtalk.nvidia.com/default/topic/936873/linux/-howto-multiseat-with-ubuntu-16-04-systemd-gdm-proprietary-drivers/1(這個問題的另一個高品質討論)。
最終對我有用的是用困難的方式做到這一點,並為每個座位提供 X 配置。
所以,我的程式是:
- 用於
loginctl attach seat1 ....
將所有必需的設備分配給 Seat1 安裝 nvidia 專有驅動程式(確保為您的系統選擇正確的驅動程式;在終端運行中
ubuntu-drivers devices
查看可用驅動程式清單)apt install nvida-384
- 重啟
- 登入 Seat0 並運行
nvidia-seetings
.選擇X Server Display Configuration
左側,點擊save to X Configuration File
右下角並將檔案另存為 ~/xorg-template - 將 ~/xorg-template 設定檔複製兩次到
/etc/X11
,一次 asxorg-seat0.conf
,一次 asxorg-seat1.conf
修改這兩個 Xorg 設定檔以分別符合 Seat0 和 Seat1 設定。我只需要更改幾行——GPU 的 PCI 位址和監視器的數量。然而,為了清楚起見,我也更改了標識符的命名 - 我認為這並不是真正需要的。下面是我的配置:
座位0
# xorg-seat0.conf Section "ServerLayout" Identifier "Layout-seat0" Screen 0 "Screen-seat0" 0 0 InputDevice "Keyboard-seat0" "CoreKeyboard" InputDevice "Mouse-seat0" "CorePointer" Option "Xinerama" "0" EndSection Section "Files" EndSection Section "InputDevice" # generated from default Identifier "Mouse-seat0" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/psaux" Option "Emulate3Buttons" "no" Option "ZAxisMapping" "4 5" EndSection Section "InputDevice" # generated from default Identifier "Keyboard-seat0" Driver "kbd" EndSection Section "Monitor" # HorizSync source: edid, VertRefresh source: edid Identifier "Monitor-seat0_1" VendorName "Unknown" ModelName "FUS H22-1W" HorizSync 28.0 - 79.0 VertRefresh 50.0 - 75.0 Option "DPMS" EndSection Section "Device" Identifier "Device-seat0" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "GeForce GT 740" BusID "PCI:1:0:0" EndSection Section "Screen" Identifier "Screen-seat0" Device "Device-seat0" Monitor "Monitor-seat0_1" DefaultDepth 24 Option "Stereo" "0" Option "nvidiaXineramaInfoOrder" "DFP-0" Option "metamodes" "DVI-D-0: nvidia-auto-select +0+0, DVI-D-1: nvidia-auto-select +1680+0" Option "SLI" "Off" Option "MultiGPU" "Off" Option "BaseMosaic" "off" SubSection "Display" Depth 24 EndSubSection EndSection
座位1
# xorg-seat1.conf Section "ServerLayout" Identifier "Layout-seat1" Screen 0 "Screen-seat1" 0 0 InputDevice "Keyboard-seat1" "CoreKeyboard" InputDevice "Mouse-seat1" "CorePointer" Option "Xinerama" "0" EndSection Section "Files" EndSection Section "InputDevice" # generated from default Identifier "Mouse-seat1" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/psaux" Option "Emulate3Buttons" "no" Option "ZAxisMapping" "4 5" EndSection Section "InputDevice" # generated from default Identifier "Keyboard-seat1" Driver "kbd" EndSection Section "Monitor" # HorizSync source: edid, VertRefresh source: edid Identifier "Monitor-seat1_1" VendorName "Unknown" ModelName "FUS H22-1W" HorizSync 28.0 - 79.0 VertRefresh 50.0 - 75.0 Option "DPMS" EndSection Section "Device" Identifier "Device-seat1" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "GeForce GT 730" BusID "PCI:2:0:0" EndSection Section "Screen" Identifier "Screen-seat1" Device "Device-seat1" Monitor "Monitor-seat1_1" DefaultDepth 24 Option "Stereo" "0" Option "nvidiaXineramaInfoOrder" "DFP-0" Option "metamodes" "DVI-D-0: nvidia-auto-select +0+0" Option "SLI" "Off" Option "MultiGPU" "Off" Option "BaseMosaic" "off" SubSection "Display" Depth 24 EndSubSection EndSection
建立一個新檔案
10-seats.conf
(/etc/lightdm/lightdm.conf.d/
如果尚不存在則建立該資料夾)並將佈局和設定檔指派給每個 X 伺服器:# 10-seats.conf [Seat:seat0] xserver-command=/usr/bin/X :0 xserver-config=/etc/X11/xorg-seat0.conf xserver-layout=Layout-seat0 [Seat:seat1] xserver-command=/usr/bin/X :1 xserver-config=/etc/X11/xorg-seat1.conf xserver-layout=Layout-seat1
- 重啟
您可能會注意到,xorg-seat[01].conf 檔案不包含任何席位提示。我使用字串 Seat0 和 Seat1 命名標識符,但這沒有相關性。
但是,在 lightdm 配置中,需要使用您在建立席位時指派給席位的名稱。 Seat0 無法更改,但第二個座位可以是您選擇的任何名稱(只要以seat
字母、數字開頭且僅包含 - 和 _)。確保使用該名稱來配置第二個座位 - 我習慣於seat1
保持簡單。
我很確定有些東西可以從 X 配置文件中刪除,但我還沒有嘗試清理它們。如果您發現一個更簡約的文件可以很好地工作,請隨時在此處發表評論,我將添加您的資訊(好吧,除非您不想發布自己的完整答案)。
例如,在我的機器上,兩個 X 配置文件中配置的滑鼠和鍵盤都不存在 - 它們是由nvidia-settings
.實體設備(USB 無線滑鼠和鍵盤)是動態添加的,因為它們分別連接到 Seat0 和 Seat1。