(K)Ubuntu 17.10 - 在 2 張帶有 nouveau 或 nvidia-384 的 NVidia 卡上登入 Multi-Seat

(K)Ubuntu 17.10 - 在 2 張帶有 nouveau 或 nvidia-384 的 NVidia 卡上登入 Multi-Seat

我已經設定了一台帶有兩個 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 只有一台。

使用新風格

使用nouveauXOrg 驅動程序,我可以使用兩個席位。兩個座位均顯示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!
  • 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

好吧,我終於成功了。

一般的

這一部分對其他人來說是一個小“入門”,對我自己來說是一個小“備忘錄”......這不是唯一的,甚至可能不是最好的方法,這只是我所做的方式它。

  1. 準備兩個 USB 集線器,並在兩個座位上各放置一個。將它們插入機器的兩個 USB 連接埠。
  2. 取得一個 USB 音效卡(一個有一個麥克風輸入和一個線路輸出連接器的小型 USB 轉接器)並將其插入電腦的另一個 USB 連接埠。假設已經有另一個(機上)聲音設備要在 Seat0 上使用。
  3. 取得兩個 USB 無線滑鼠/鍵盤組合,並將一個 USB 轉接器插入兩個 USB 集線器中的每一個。
  4. 將集線器分配給對應的座位 ( loginctl attach seat1 /dev/...)。這會自動指派插入集線器的滑鼠和鍵盤。
  5. 將 USB 音效卡分配給 Seat1
  6. 將其中一張 Nvidia 卡(所有卡,包括 DRM 和聲音設備)分配給 Seat1。
  7. 如果您還有任何其他裝置未插入已指派的集線器,請也指派它們。
  8. 跑步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 配置。

所以,我的程式是:

  1. 用於loginctl attach seat1 ....將所有必需的設備分配給 Seat1
  2. 安裝 nvidia 專有驅動程式(確保為您的系統選擇正確的驅動程式;在終端運行中ubuntu-drivers devices查看可用驅動程式清單)

    apt install nvida-384
    
  3. 重啟
  4. 登入 Seat0 並運行nvidia-seetings.選擇X Server Display Configuration左側,點擊save to X Configuration File右下角並將檔案另存為 ~/xorg-template
  5. 將 ~/xorg-template 設定檔複製兩次到/etc/X11,一次 as xorg-seat0.conf,一次 asxorg-seat1.conf
  6. 修改這兩個 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
      
  7. 建立一個新檔案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
    
  8. 重啟

您可能會注意到,xorg-seat[01].conf 檔案不包含任何席位提示。我使用字串 Seat0 和 Seat1 命名標識符,但這沒有相關性。

但是,在 lightdm 配置中,需要使用您在建立席位時指派給席位的名稱。 Seat0 無法更改,但第二個座位可以是您選擇的任何名稱(只要以seat字母、數字開頭且僅包含 - 和 _)。確保使用該名稱來配置第二個座位 - 我習慣於seat1保持簡單。

我很確定有些東西可以從 X 配置文件中刪除,但我還沒有嘗試清理它們。如果您發現一個更簡約的文件可以很好地工作,請隨時在此處發表評論,我將添加您的資訊(好吧,除非您不想發布自己的完整答案)。

例如,在我的機器上,兩個 X 配置文件中配置的滑鼠和鍵盤都不存在 - 它們是由nvidia-settings.實體設備(USB 無線滑鼠和鍵盤)是動態添加的,因為它們分別連接到 Seat0 和 Seat1。

相關內容