今使用している Lenovo ThinkPad X230 は miniDPとVGAポートが付いている。しかしながら、本体の液晶も含めて同時2画面出力しかできない。ドッキングステーションを付けても、同様のようだ。
トリプルディスプレイを使いたいので、USB接続のディスプレイアダプタを試してみた。
環境
Ubuntu 18.04
Thinkpad X230
その1 謎の USB − HDMI ディスプレイアダプタを使う
いつどこで買ったかわからない安価なディスプレイアダプタ。
ダイソーのUSB Type-C / Type-A 変換アダプタを使って刺すとこんな感じ:
[154395.723167] usb 3-2: USB disconnect, device number 9
[154402.582563] usb 3-2: new full-speed USB device number 10 using xhci_hcd
[154402.731242] usb 3-2: not running at top speed; connect to a high speed hub
[154402.732206] usb 3-2: New USB device found, idVendor=9636, idProduct=9300
[154402.732207] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[154402.732208] usb 3-2: Product: USB C Video Adaptor
[154402.732209] usb 3-2: Manufacturer: WinUSB
[154402.732210] usb 3-2: SerialNumber: 000000000001
[154410.699529] usb 3-2: USB disconnect, device number 10
[154414.522285] usb 3-2: new full-speed USB device number 11 using xhci_hcd
[154414.671077] usb 3-2: not running at top speed; connect to a high speed hub
[154414.672204] usb 3-2: New USB device found, idVendor=9636, idProduct=9300
[154414.672206] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[154414.672207] usb 3-2: Product: USB C Video Adaptor
[154414.672207] usb 3-2: Manufacturer: WinUSB
[154414.672208] usb 3-2: SerialNumber: 000000000001
とりあえず接続しても画面に何も出ない。
調べてみたら、Ubuntu18.04にはデフォルトでdisplaylinkドライバが入っていないらしい。
・・・ということで、以下のように迷宮の冒険に進むことになった。
判断ミス
USBディスプレイというと Displaylink でしょう、という旧い固定観念で進めていたら見事にミス。以下のようにドライバを設定したが、この時点では適切な対応ではなかった。ここで用いたアダプタは Displaylink とは何の関係もないアダプタであったとさ。
「Ubuntu 18.04 でUSB接続モニタを使えるようにする」
https://qiita.com/menphim/items/ff0a708a917d2b8256b5
に沿ってDisplaylinkドライバをダウンロード、設定を行ったがどうにも動作しませんでした。
謎のアダプタの正体
後で、このアダプタをWindows10に繋いでみたら、MHLデバイスと表示されました。
MHL とは
Mobile High-Definition Link.
https://en.wikipedia.org/wiki/Mobile_High-Definition_Link
USBポートが使われることが多く、その場合USB機能とMHL機能でUSBポートを共用する。USBポートから映像が出ていても、USBデバイスとしてディスプレイが繋がっているわけではない。MHL機能を搭載したUSBポートを映像出力側が持っていないと使えない。
あれこれ買う
安価なアダプターは不具合が発生することが多く、このコネクタもそれかな・・・と別のアダプタで試すことにしました。とりあえず、HDMIポートがついてればいいだろうと思って安いものをいくつか買ってみたのですがことごとく使えない。安いものはMHL用のアダプタということでした。
その2 aliexpressで買ったもの。(AIXXCO USB Type-C Hub + HDMI )
USB Type-C用でしたが変換アダプタを使ってつなげてみました・・・画面もdmesgにも何も出ない。(初期不良ぽい。)
その3 Amazon で買ったもの。(LESON USB Type-C Hub + HDMI + VGA)
こちらもUSB Type-C - USB Type-A変換アダプタを使ってつなげてみましたが、画面に出ない
[ 7718.828081] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[ 7724.204009] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[ 7724.412023] usb 4-1: device not accepting address 7, error -62
[ 7724.776034] usb 3-1: new high-speed USB device number 8 using xhci_hcd
[ 7724.926713] usb 3-1: New USB device found, idVendor=05e3, idProduct=0610
[ 7724.926717] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 7724.926720] usb 3-1: Product: USB2.1 Hub
[ 7724.926722] usb 3-1: Manufacturer: GenesysLogic
[ 7724.927306] hub 3-1:1.0: USB hub found
[ 7724.927610] hub 3-1:1.0: 4 ports detected
[ 7725.124183] usb 4-1: new SuperSpeed USB device number 8 using xhci_hcd
[ 7725.146894] usb 4-1: New USB device found, idVendor=05e3, idProduct=0626
[ 7725.146896] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 7725.146897] usb 4-1: Product: USB3.1 Hub
[ 7725.146898] usb 4-1: Manufacturer: GenesysLogic
[ 7725.148592] hub 4-1:1.0: USB hub found
[ 7725.148880] hub 4-1:1.0: 4 ports detected
dmesg によると、 USB HUBとしてしか認識していないですね。?? と思って別のアダプターも買ってみた。
その4 ORICO CDHU3-CR
なんとなくかっこよさげ。しかしこちらも同様に画面出ず。
[ 8252.147618] usb 3-2: new high-speed USB device number 9 using xhci_hcd
[ 8252.299975] usb 3-2: New USB device found, idVendor=1d5c, idProduct=5012
[ 8252.299980] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 8252.299982] usb 3-2: Product: USB2.0 Hub
[ 8252.299984] usb 3-2: Manufacturer: Fresco Logic, Inc.
[ 8252.300617] hub 3-2:1.0: USB hub found
[ 8252.300675] hub 3-2:1.0: 5 ports detected
[ 8252.867549] usb 3-2.1: new high-speed USB device number 10 using xhci_hcd
[ 8252.968291] usb 3-2.1: New USB device found, idVendor=1d5c, idProduct=5010
[ 8252.968310] usb 3-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 8252.968312] usb 3-2.1: Product: USB2.0 Hub
[ 8252.968314] usb 3-2.1: Manufacturer: Fresco Logic, Inc.
[ 8252.968753] hub 3-2.1:1.0: USB hub found
[ 8252.968779] hub 3-2.1:1.0: 5 ports detected
こちらもUSB HUBとしてしか認識してないですね。
んんん・・・このアダプタは筐体が透明だったので、基板が丸見えです。これはドライバチップは何・・・?と顕微鏡でみてみたら、それらしきものが見つかりませんでした。
ここではじめてその1〜その4 のアダプタが MHL 用だったことを理解する。
X230 で使える USB-HDMI 変換アダプタとは
なるほどね、
これらのアダプタはスマホやMacBook、Lenovo Yogaシリーズなどで使えるとある。てっきりUSB Type-C の対応を示しているのかと思ってましたが、それらは MHL に対応しているということなのですね。
( AIXXCO USB Type-C Hub + HDMI の対応表 )
そして、X230 の USB ポートは MHL には対応していない。
ということで、旧い知識で想定していたような、ディスプレイチップがアダプタに搭載されたものを探す必要があります。
FL2000 チップ搭載変換アダプタ
そういったものを探してみたら、安価なものは Windows 専用と謳っているものがありました。
そういったものは FL2000 というチップを搭載しているらしい。
http://www.frescologic.com/product/single/fl2000/
Linuxにもドライバが公開されていました。
https://github.com/FrescoLogic/FL2000/issues/16
しかしながらこれは14.04用に作られていてUbuntu18.04のために動かすのは難しそう。
Displaylink チップ搭載変換アダプタ
さて、Linux勢でこの10年来良く使われてきたものは Displaylink 系のアダプタです。
ということで改めて DisplayLink というキーワードで探してみました。
その5 Plugable USB3.0 HDMIx2 + Gigabit Ethernet RJ-45 port (USB3-6950-HDMI)
せっかくなのでデュアルモニター 4K@60Hz とあるものを選んでみました。
既に「その1」でDisplayportのドライバを導入していたので、繋ぐだけで画面が出た・・・!
[53793.024060] usb 4-1: new SuperSpeed USB device number 6 using xhci_hcd
[53793.044815] usb 4-1: New USB device found, idVendor=17e9, idProduct=600b
[53793.044820] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[53793.044822] usb 4-1: Product: Plugable USB3-6950 Dual HDMI Adapter
[53793.044824] usb 4-1: Manufacturer: DisplayLink
[53793.044826] usb 4-1: SerialNumber: 8CAE4CE71386
[53793.069946] usb 4-1: Warning! Unlikely big volume range (=767), cval->res is probably wrong.
[53793.069950] usb 4-1: [4] FU [Mic Capture Volume] ch = 2, val = -4592/7680/16
[53793.075638] usb 4-1: Warning! Unlikely big volume range (=672), cval->res is probably wrong.
[53793.075643] usb 4-1: [7] FU [USB Audio Playback Volume] ch = 6, val = -10752/0/16
[53793.097693] cdc_ncm 4-1:1.5: MAC-Address: 8c:ae:4c:e7:13:86
[53793.097699] cdc_ncm 4-1:1.5: setting rx_max = 16384
[53793.097865] cdc_ncm 4-1:1.5: setting tx_max = 16384
[53793.098186] cdc_ncm 4-1:1.5 usb0: register 'cdc_ncm' at usb-0000:00:14.0-1, CDC NCM, 8c:ae:4c:e7:13:86
[53793.139436] cdc_ncm 4-1:1.5 enx8cae4ce71386: renamed from usb0
[53793.196247] IPv6: ADDRCONF(NETDEV_UP): enx8cae4ce71386: link is not ready
[53793.196399] IPv6: ADDRCONF(NETDEV_UP): enx8cae4ce71386: link is not ready
[53793.220719] cdc_ncm 4-1:1.5 enx8cae4ce71386: network connection: disconnected
[53793.364719] cdc_ncm 4-1:1.5 enx8cae4ce71386: network connection: disconnected
結果、X230 のディスプレイ+ USB ビデオアダプタ+ X230 本体の miniDP ポート で3台で接続できるようになりました。
問題点
4K ディスプレイ+ 1920x1200 解像度のディスプレイの組み合わせでは、4K ディスプレイは1920x1080でなければ画面が出ませんでした。
(調査中です)
したがって、トリプルディスプレイの実現は先に書いたように X230 本体の miniDP ポートを併用して実現しています。
Displaylinkドライバの導入
「その1」の時点で導入したディスプレイドライバ。
「Ubuntu 18.04 でUSB接続モニタを使えるようにする」
https://qiita.com/menphim/items/ff0a708a917d2b8256b5
に基づいた作業の記録です。ドライバのバージョンは新しくなってますが、作業自体は全く同じです。
$ unzip DisplayLink\ USB\ Graphics\ Software\ for\ Ubuntu\ 5.1.zip
Archive: DisplayLink USB Graphics Software for Ubuntu 5.1.zip
inflating: displaylink-driver-5.1.26.run
inflating: LICENSE
$ chmod 777 displaylink-driver-5.1.26.run
$ sudo ./displaylink-driver-5.1.26.run
Verifying archive integrity... 100% All good.
Uncompressing DisplayLink Linux Driver 5.1.26 100%
DisplayLink Linux Software 5.1.26 install script called: install
Distribution discovered: Ubuntu 18.04.3 LTS
Installing
Configuring EVDI DKMS module
Registering EVDI kernel module with DKMS
Building EVDI kernel module with DKMS
Installing EVDI kernel module to kernel tree
EVDI kernel module built successfully
Installing x64-ubuntu-1604/DisplayLinkManager
Installing libraries
Installing firmware packages
Installing licence file
Adding udev rule for DisplayLink DL-3xxx/4xxx/5xxx/6xxx devices
Please read the FAQ
http://support.displaylink.com/knowledgebase/topics/103927-troubleshooting-ubuntu
Installation complete!
$ echo "evdi" | sudo tee -a /etc/modules-load.d/modules.conf
evdi
$ cat /etc/modules-load.d/modules.conf
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
evdi
$ echo "options evdi initial_device_count=2" | sudo tee -a /etc/modprobe.d/dkms.conf
options evdi initial_device_count=2