DisplayLink
DisplayLink は、USB と WiFi を使用してディスプレイを接続するためのテクノロジーです。
Linux における DisplayLink デバイスのサポートはまだ実験的です。使用するのに成功している人もいますが、簡単に使えるわけではなく動作するという保証もありません。このページに記載しているのは DisplayLink で外付けモニターを使用する方法の中でも最も成功率が高いとされる方法です。
USB 3.0 で接続しても、DisplayLink で接続されたモニターには DisplayPort などで接続されたモニターよりも大きな遅延が発生する可能性があることに注意してください。
目次
- 1 インストール
- 2 設定
- 3 トラブルシューティング
- 3.1 動作しない設定
- 3.2 画面の再描画が壊れている
- 3.3 ゴースト
- 3.4 GNOME 3 で DisplayLink のリフレッシュレートが異常に低い
- 3.5 内蔵画面を無効にすると、すべてのディスプレイが 1 FPS に制限される
- 3.6 Google Chrome や Webkit2 ベースのアプリケーションで再描画が遅くなったり反応しなくなる
- 3.7 displaylink の画面を有効化できない
- 3.8 サスペンドの問題
- 3.9 USB ホットプラグ時に DisplayLink が動作しない
- 3.10 X をアップグレードした後に Intel GPU で DisplayLink ドライバーが機能しなくなる
- 3.11 Dell D6000 ドッキングステーションを使用すると、ランダムな間隔で切断される
- 3.12 起動後にディスプレイが 1 台しか認識されない
- 3.13 X11 上の DisplayLink と NVIDIA dGPU (Optimus+DL)
- 3.14 USB 2.0 DisplayLink が動作しない
- 4 参照
インストール
USB 2.0 DL-1x5, DL-1x0 デバイス
DisplayLink のカーネル DRM ドライバーは udl
です。初期の udlfb ドライバーを書き直したドライバーになります。udl
を利用すれば Xrandr を使って DisplayLink モニターを設定することができます。
linux 4.14.9-1 以上であれば特に設定をしなくても機能するはずです。古いバージョンのパッケージを使っている場合やカーネルコンフィグで CONFIG_FB_UDL=m
と設定している場合、旧式のカーネルモジュールである udlfb
をブラックリストに追加する必要があります。
USB 3.0 DL-6xxx, DL-5xxx, DL-41xx, DL-3xxx デバイス
- AUR から displaylinkAUR ドライバーをインストールしてください。
udl
ドライバーと同じように Xrandr を使って DisplayLink モニターを設定できます。 - systemctl を使って
displaylink.service
を有効化してください。 - AccelMethod "none" かつ MatchDriver "evdi" というオプションで "modesetting" ドライバーを使用するように設定します。
以下の内容でファイルを作成します:
/usr/share/X11/xorg.conf.d/20-evdidevice.conf
Section "OutputClass" Identifier "DisplayLink" MatchDriver "evdi" Driver "modesetting" Option "AccelMethod" "none" EndSection
設定を反映するには再起動が必要です。evdi-gitAUR パッケージのインストールが必要かもしれません。
X ディスプレイの設定
ドライバーのインストール後、以下を実行:
$ xrandr --listproviders
Providers: number : 2 Provider 0: id: 0x49 cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 2 outputs: 8 associated providers: 0 name:Intel Provider 1: id: 0x13c cap: 0x2, Sink Output crtcs: 1 outputs: 1 associated providers: 0 name:modesetting
上記の出力で、Provider 0 がシステムの標準のグラフィックプロバイダ (Intel) であること、そして Provider 1 (modesetting) が DisplayLink プロバイダであることが確認できます。DisplayLink デバイスを使うには、Provider 1 を Provider 0 に接続します:
$ xrandr --setprovideroutputsource 1 0
xrandr によって DVI 出力が追加されるので、これで通常通り xrandr で使用することができます。実験的ですがホットプラグもサポートしているので、ちゃんと動作すれば非常に簡単にセットアップできたことになります。上手く動作しない場合、以下の設定が必要になります。
設定
以下の設定手順は X サーバーを既に立ち上げる準備が整っているのが前提で、後は既存のセットアップにモニターを追加するだけという状態になっている必要があります。
フレームバッファデバイスのロード
DisplayLink デバイスがシステムに認識される前に、udl
カーネルモジュールをロードしなくてはなりません。ロードするには、次を実行:
# modprobe udl
DisplayLink デバイスを接続すると、表示に何らかの変化が現れるはずです。緑色の画面が出るのが普通ですが、他の表示がされることもよくあるので気にする必要はありません。最も大事なのは、dmesg
の出力で以下のように DisplayLink デバイスが認識されたのを確認できることです:
usb 2-1.1: new high-speed USB device number 7 using ehci-pci usb 2-1.1: New USB device found, idVendor=17e9, idProduct=03e0 usb 2-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 2-1.1: Product: Lenovo LT1421 wide usb 2-1.1: Manufacturer: DisplayLink usb 2-1.1: SerialNumber: 6V9BBRM1 [drm] vendor descriptor length:17 data:17 5f 01 00 15 05 00 01 03 00 04 udl 2-1.1:1.0: fb1: udldrmfb frame buffer device [drm] Initialized udl 0.0.1 20120220 on minor 1
さらに、プライマリディスプレイに既にフレームバッファが存在する場合、/dev
に /dev/fb1
のような新しい fb
デバイスが作られます。
起動時に自動的に udl
をロードするには、以下の内容で /etc/modules-load.d/
に udl.conf
ファイルを作成してください:
/etc/modules-load.d/udl.conf
udl
カーネルモジュールのロードに関してはカーネルモジュール#ロードを参照。
X サーバーの設定
xrandr
やデスクトップ環境のディスプレイ設定 UI を使って udl
や displaylink
ドライバーを使用する USB モニターを設定してください。
xrandr
ドライバーをロードすると、DisplayLink モニターがプロバイダの出力に表示されます:
$ xrandr --listproviders
Providers: number : 2 Provider 0: id: 0x43 cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 2 outputs: 2 associated providers: 1 name:Intel Provider 1: id: 0xcb cap: 0x2, Sink Output crtcs: 1 outputs: 1 associated providers: 1 name:modesetting
上記の例では、Provider 1 が DisplayLink デバイスで、Provider 0 がデフォルトディスプレイです。xrandr --current
を実行すると利用可能なスクリーンのリストが表示されます:
$ xrandr --current
Screen 0: minimum 320 x 200, current 1600 x 900, maximum 8192 x 8192 LVDS1 connected 1600x900+0+0 (normal left inverted right x axis y axis) 309mm x 174mm 1600x900 60.0*+ 40.0 1440x900 59.9 1360x768 59.8 60.0 1152x864 60.0 1024x768 60.0 800x600 60.3 56.2 640x480 59.9 VGA1 disconnected (normal left inverted right x axis y axis) DVI-1-0 connected (normal left inverted right x axis y axis) 1366x768 60.0 + 1368x768_59.90 59.9 1368x768_59.90 (0xd0) 85.7MHz h: width 1368 start 1440 end 1584 total 1800 skew 0 clock 47.6KHz v: height 768 start 769 end 772 total 795 clock 59.9Hz
上記のコマンドで DisplayLink のスクリーンが表示されない場合、DisplayLink をメイン GPU にオフロードする必要があります:
$ xrandr --setprovideroutputsource 1 0
スクリーンが使えるようになったら、Xrandr を参照して設定してください。自動で設定する方法は displaylink.sh を参照。
起動時に DVI 出力を有効化
大抵の場合 DisplayLink プロバイダはメインのプロバイダに自動的に接続されません。そのため起動時に DVI 出力デバイスが使えません。X が起動したときに自動的にコマンドを実行するようにすることでウィンドウマネージャで自動的にディスプレイを設定できます。
デスクトップマネージャのスタートアップ設定を編集して以下のようなコマンドを追加してください:
$(xrandr --listproviders | grep -q "modesetting") && xrandr --setprovideroutputsource 1 0
例えば、SDDM のスタートアップ設定ファイルは /usr/share/sddm/scripts/Xsetup
です。
~/.xprofile
に上記のコマンドを記述すると一部のウィンドウマネージャでディスプレイの設定が破壊されるので注意してください。何かディスプレイに出力されるまえにコマンドを実行する必要があります。
displaylink と nvidia/nouveau ドライバーの切り替え
displaylink バージョン 1.3.54-1 現在、optimus ノートパソコンで displaylink デバイスと nvidia/nouveau ドライバーを同時に切り替えることは不可能です。intel GPU で displaylink デバイスを使えるようにするには、設定ファイルを作成する必要があります。しかしながら、設定ファイルを作成した場合、primusrun を使うことができなくなります。Bumblebee サービスを実行しても、機能しません。また、ノートパソコンのファンが音を立てて温度が急激に上昇します。nvidia ドライバーに戻したい場合、ファイルの記述をコメントアウトして再起動してください。
dl-switchAUR パッケージをインストールして displaylink を有効化するメニューエントリをブートローダーに追加することで切り替えを楽にすることができます。例えば rEFInd ブートローダーの場合:
/boot/EFI/refind/refind.conf
... submenuentry "Boot with DisplayLink workaround" { add_options "systemd.unit=displaylink.target" } ...
起動時に、普通に起動するか displaylink を使うように起動するか選択できます。
ディスクリートのビデオカードでどちらのドライバーが使われているか確認するには lspci -nnk -s xx:xx.x
を実行してください (xx:xx.x は nvidia gpu の pci id に置き換えてください)。
トラブルシューティング
動作しない設定
これらは、表示設定 (XFCE4 パッケージに含まれています) と外部ツール - arandr を使用して Xfce でテストされています。XFCE4 の表示設定はクラッシュする可能性が高いため、ARandR が役立つ可能性があります。
USB 経由で DisplayLink デバイスをコンピュータに接続すると、コンピュータのディスプレイ設定にモニタが表示されるはずです。試してみるべきトラブルシューティング手順がいくつかあります:
- X ディスプレイの設定をチェックしてください。外部モニターが認識されている場合、以下のコマンドを試してみてください:
xrandr --setprovideroutputsource 1 0 xrandr --setprovideroutputsource 2 0 xrandr --setprovideroutputsource 3 0 ...
displaylink.service
を再起動してみてください。- USB ケーブルを再接続してみてください。
udl
ドライバーがロードされていること、モニターが接続されていることを確認してください。
画面の再描画が壊れている
カーネルドライバーとして udl
を使用するとモニターが機能しなくなり、マウスを移動したりウィンドウを変形したときだけしか画面が更新されない場合、スクリーンの modeline の設定が間違っています。以下のようなコマンドで適切な modeline を取得できます:
gtf 1366 768 59.9
1366
と 768
はモニターの横・縦の解像度に、59.9
はリフレッシュレートに置き換えてください。modeline を使うには、以下のように xrandr
で新しいモードを作成:
xrandr --newmode "1368x768_59.90" 85.72 1368 1440 1584 1800 768 769 772 795 -HSync +Vsync
そして Xrandr に追加:
xrandr --addmode DVI-0 1368x768_59.90
それから DisplayLink モニターで上記のモードを使うようにモニターを設定することで、再描画問題は解決するはずです。別のモードを使用する方法は Xrandr のページを見てください。
問題が解決しない場合、コンポジタを使うことで解決する場合があります。xcompmgr や picom を使うことで問題を低減できます。
ゴースト
カーソルを動かすことによってゴーストが発生する場合は、コンポジターの設定が問題の原因である可能性があります。設定を変更すると、動作するセットアップが得られる場合があります。
GNOME 3 で DisplayLink のリフレッシュレートが異常に低い
DisplayLink を設定したとたんにデスクトップが遅くなる場合、背景画像をシンプルに、例えば真っ黒にするなど設定してみてください。
内蔵画面を無効にすると、すべてのディスプレイが 1 FPS に制限される
https://gitlab.freedesktop.org/xorg/xserver/-/issues/1028#note_504826 から xorg-server にパッチを適用すると、問題が解決されるようです。
Google Chrome や Webkit2 ベースのアプリケーションで再描画が遅くなったり反応しなくなる
ハードウェアアクセラレーションのバグが関係しています。displaylink の画面で glxgears を実行したときに 1fps となることがあります。いまのところ完全な解決方法はありませんが、ハードウェアアクセラレーションをオフにすることで一時的な対応になります。
ハードウェアアクセラレーションのオプションが存在しないアプリケーションの場合、LIBGL_ALWAYS_SOFTWARE=1
環境変数を使うことで同じく回避できます。
displaylink の画面を有効化できない
DisplayLink デバイスに接続されたモニターが認識されるのに、設定を適用すると無効になってしまう場合、nouveau モジュールをブラックリストに追加して再起動してみてください:
/etc/modprobe.d/nouveau.conf
blacklist nouveau options nouveau modeset=0
サスペンドの問題
Displaylink はサスペンド後は機能しません。一度 displaylink の usb ケーブルを抜いてから再度接続してください。
USB ホットプラグ時に DisplayLink が動作しない
DisplayLink モニターを使用できるようにするには、起動時にその USB ケーブルをラップトップに接続する必要があります。それ以外の場合は、それらが使用可能であるかのように動作し、マウスをそこに移動できますが、設定が正しい場合でも、画像がフリーズする可能性があります (回避策 1 を参照) 起動時に接続されていない場合は、接続して再起動してください。
X をアップグレードした後に Intel GPU で DisplayLink ドライバーが機能しなくなる
こちらのページ に書かれているように、X ウィンドウサーバーを 1.18.3 以上に更新するとデフォルトで DisplayLink が使えなくなります。内蔵の Intel GPU を使っている環境、あるいは内蔵の Intel GPU とディスクリートの GPU を使っている環境で発生する問題です。以下の解決方法が存在します。
フォールバックとして古い intel ドライバーを使用する
デフォルトの "modesetting" の代わりに内蔵 GPU で "intel" ドライバーを使用してください。
以下の内容でファイルを作成します:
/usr/share/X11/xorg.conf.d/20-displaylink.conf
Section "Device" Identifier "Intel Graphics" Driver "intel" EndSection
設定を反映するには再起動が必要です。
evdi-gitAUR パッケージのインストールが必要かもしれません。
modesetting で一時的に PageFlip を無効化する
"modesetting" ドライバーを使用したい場合、ページフリップを無効化することで解決します。以下の内容でファイルを作成してください:
/usr/share/X11/xorg.conf.d/20-displaylink.conf
Section "Device" Driver "modesetting" Option "PageFlip" "false" EndSection
Dell D6000 ドッキングステーションを使用すると、ランダムな間隔で切断される
Dell D6000 ドッキングステーションを使用すると、使用中にディスプレイがランダムな間隔で切断される場合があるとユーザーから報告を受けています。[1] これには、ディスプレイを再初期化するためにドックを物理的に再接続する必要があります。
この問題は、アイドル時にシンク/ソースを自動的にサスペンドする PulseAudio の module-suspend-on-idle
モジュールによって引き起こされているようです。
module-suspend-on-idle
モジュールの読み込みを無効にするには、使用中の設定ファイル (~/.config/pulse/default.pa
または /etc/pulse/default.pa
) 内の次の行をコメントアウトします。:
/etc/pulse/default.pa
### Automatically suspend sinks/sources that become idle for too long # load-module module-suspend-on-idle
起動後にディスプレイが 1 台しか認識されない
複数のディスプレイが DisplayLink ドッキングステーションに接続されているが、起動後に 1 台しか認識されない場合、/etc/modules-load.d/evdi.conf
に evdi
モジュールを追加し、/etc/modprobe.d/dkms.conf
に "options evdiInitial_device_count=2"
を追加することで、起動時に evdi が複数のディスプレイを検索するように強制することができます。
X11 上の DisplayLink と NVIDIA dGPU (Optimus+DL)
NVIDIA Optimus を使用するラップトップがより永続的な設定 (X11 を使用) にある場合は、dGPU を使用するようにビデオ出力を永続的に設定すると便利です。nvidia-xconfig
は次のような結果を生成する可能性があります:
/etc/X11/xorg.conf
Section "ServerLayout" Identifier "Layout0" Screen 0 "Screen0" InputDevice "Keyboard0" "CoreKeyboard" InputDevice "Mouse0" "CorePointer" EndSection # ... # Keyboard0 # Mouse0 # ... Section "Monitor" Identifier "Monitor0" VendorName "Unknown" ModelName "Unknown" Option "DPMS" EndSection Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" BusID "PCI:1:0:0" EndSection Section "Screen" Identifier "Screen0" Device "Device0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Depth 24 EndSubSection EndSection
evdiAUR パッケージと displaylinkAUR パッケージの両方をインストールした後でも、DisplayLink に接続されたディスプレイが表示されない場合があります。手動で、Xorg に、displaylinkAUR ドライバー modesetting プラグインを使用するように指示できます。
1. どの DRI デバイスかを特定する
ls -al /dev/dri/by-path
を実行するのがデバイスを特定する最も簡単な方法です。
$ ls -al /dev/dri/by-path
total 0 drwxr-xr-x 2 root root 160 May 11 19:10 . drwxr-xr-x 3 root root 180 May 10 16:03 .. lrwxrwxrwx 1 root root 8 May 10 16:03 pci-0000:00:02.0-card -> ../card0 lrwxrwxrwx 1 root root 13 May 10 16:03 pci-0000:00:02.0-render -> ../renderD128 lrwxrwxrwx 1 root root 8 May 11 19:10 pci-0000:01:00.0-card -> ../card1 lrwxrwxrwx 1 root root 13 May 10 16:03 pci-0000:01:00.0-render -> ../renderD129 lrwxrwxrwx 1 root root 8 May 10 16:03 platform-evdi.0-card -> ../card2 lrwxrwxrwx 1 root root 8 May 10 16:03 platform-evdi.1-card -> ../card3
ご覧のとおり、最初の evdiAUR デバイスは /dev/dri/card2
です。
2. Xorg の設定に以下を追加します:
/etc/X11/xorg.conf
# Add the following to the ServerLayout section after Screen0 # ... Screen 1 "Screen1" # ... # ... at the end, add: Section "Device" Identifier "usbdev" Driver "modesetting" Option "kmsdev" "/dev/dri/card2" EndSection Section "Screen" Identifier "Screen1" Device "usbdev" EndSection
3. X サーバーを再起動して変更を確認します
4. DL 画面が表示されます。必要に応じて Xrandr を使用して設定します
USB 2.0 DisplayLink が動作しない
udl
は非常に扱いにくく、USB 2 デバイスには、動作するものと動作しないものがあります。例として、HP NL571AA は動作することがテストされています。USB 2.0 デバイスが udl
(EVGA "UV PLUS+16" など) で動作しない場合、journal に次のエラーが表示されます:
[drm] vendor descriptor length:e0 data:00 00 00 00 00 00 00 00 00 00 00 [drm:udl_init [udl]] *ERROR* Unrecognized vendor firmware descriptor [drm] Initialized udl 0.0.1 20120220 for 1-1.3:1.0 on minor 1 [drm] Initialized udl on minor 1 udl 1-1.3:1.0: [drm] fb1: udldrmfb frame buffer device usbcore: registered new interface driver udl
参照
- DisplayLink Open Source: 公式の DisplayLink オープンソースサポートフォーラム