Using a Dell XPS 9305 we have already seen options for expanding connectivity and connecting to peripherals that we take for granted: wired networks, usb mice and external monitors. We have seen that a Dell DA310 and other hdmi-enabled multi mini UGreen are successful partners.
Whilst these mini adapters and hubs work and very portable, there are messy. Using a dedicated docking station like the Dell TB16 is still a good option for a stable desk environment where monitors and network ports are consistent.
The TB16 works fine with Fedora 35/5.15.6 kernel - the network adptor is the same chipset (RTL8153) as the DA310, the displayport (full and mini) as well as hdmi ports are recognised and can drive 1980x monitors happily and the USB 3.1 hub works for connecting various devices, incl mice, keyboards, webcams and 2.5" HDD.
However, its fair to say that the TB16 isn't a well loved product with many reported issues with network and USB dropouts, monitor connectivity problems. For my device, it appears to already be on the 1.0.2 firmware and thus my experiences are based on this.
$ fwupdmgr get-devices
...
├─Thunderbolt Cable:
│ Device ID: 2315cbb258f43caf4677117e8dfbb6ce68f60f88
│ Current version: 16.00
│ Vendor: Dell (THUNDERBOLT:0x00D4, TBT:0x00D4)
│ GUIDs: 99102381-23e8-5ff5-9767-8bcda2aaa864 ← THUNDERBOLT\VEN_00D4&DEV_B051&REV_00
│ 6634407c-6706-5fe9-907e-37efcbc8098a ← THUNDERBOLT\VEN_00D4&DEV_B051
│ b4fd3cdf-4e3a-5090-a583-45367cfd6421 ← TBT-00d4b051
│ 8564922d-2c7a-5169-9cff-d3e73f0bd807 ← TBT-00d4b051-controller0-1
│ Device Flags: • Updatable
│ • System requires external power source
│ • Device stages updates
│
├─Thunderbolt Dock:
│ Device ID: c9f174d381c66aab3dea447decfe5df418a2d22f
│ Current version: 16.00
│ Vendor: Dell (THUNDERBOLT:0x00D4, TBT:0x00D4)
│ GUIDs: 8e801c01-c7bf-5de2-85e3-185b2afe3b10 ← THUNDERBOLT\VEN_00D4&DEV_B054&REV_00
│ 1fa96dfa-7407-50b2-87d4-4ae4351c3867 ← THUNDERBOLT\VEN_00D4&DEV_B054
│ 76cc74d4-f062-5b93-a11c-8d2a58a25848 ← TBT-00d4b054
│ f5a71973-58f2-5638-9c9a-d9c7538d6772 ← TBT-00d4b054-controller0-301
│ Device Flags: • Updatable
│ • System requires external power source
│ • Device stages updates
Checking firmware updates for the TB16 dock with fwupdmgr get-updates c9f174d381c66aab3dea447decfe5df418a2d22f
reports there is nothing available from LVFS, although others report version 27 is available.
Network
I use the TB16's network port as my primary connection with the XPS 9305 - the interface is bonded with the internal wifi; this does mean that I do not notice network dropouts as much as I could but I have noticed on some odd occassions that the wired connection will be lost and at some point come back. The desktop switch that is the other end shows a solid green (1000M) link at this point.Very occassionally the network interface comes up at 100mbit rather than the 1000mbit; forcing
ethtool -s enp87s0u1u2 speed 1000 duplex full
fixes this as a one off but there are other options (see below).
Previously the 4.x kernel had problems which resulted in packet corruption but this was resolved and does not appear to the cause of the very occassional network drop outs. Limited testing shows that the drop outs tend to be clustered together:
Dec 14 09:44:31 xps kernel: bond0: (slave enp87s0u1u2): link status definitely down, disabling slave
Dec 14 09:44:31 xps kernel: bond0: (slave wlp164s0): making interface the new active one
Dec 14 09:44:34 xps kernel: bond0: (slave enp87s0u1u2): link status up, enabling it in 200 ms
Dec 14 09:44:34 xps kernel: bond0: (slave enp87s0u1u2): invalid new link 3 on slave
Dec 14 09:44:35 xps kernel: bond0: (slave enp87s0u1u2): link status definitely up, 1000 Mbps full duplex
Dec 14 09:44:35 xps kernel: bond0: (slave enp87s0u1u2): making interface the new active one
Dec 14 09:44:35 xps kernel: bond0: (slave enp87s0u1u2): link status definitely down, disabling slave
Dec 14 09:44:35 xps kernel: bond0: (slave wlp164s0): making interface the new active one
Dec 14 09:44:38 xps kernel: bond0: (slave enp87s0u1u2): link status up, enabling it in 200 ms
Dec 14 09:44:38 xps kernel: bond0: (slave enp87s0u1u2): invalid new link 3 on slave
Dec 14 09:44:39 xps kernel: bond0: (slave enp87s0u1u2): link status definitely up, 1000 Mbps full duplex
Dec 14 09:44:39 xps kernel: bond0: (slave enp87s0u1u2): making interface the new active one
Dec 14 09:44:39 xps kernel: bond0: (slave enp87s0u1u2): link status definitely down, disabling slave
Dec 14 09:44:39 xps kernel: bond0: (slave wlp164s0): making interface the new active one
Dec 14 09:44:42 xps kernel: bond0: (slave enp87s0u1u2): link status up, enabling it in 200 ms
Dec 14 09:44:42 xps kernel: bond0: (slave enp87s0u1u2): invalid new link 3 on slave
Dec 14 09:44:42 xps kernel: bond0: (slave enp87s0u1u2): link status definitely up, 1000 Mbps full duplex
Dec 14 09:44:42 xps kernel: bond0: (slave enp87s0u1u2): making interface the new active one
...
Dec 14 10:13:05 xps kernel: bond0: (slave enp87s0u1u2): link status definitely down, disabling slave
Dec 14 10:13:05 xps kernel: bond0: (slave wlp164s0): making interface the new active one
Dec 14 10:13:13 xps kernel: bond0: (slave enp87s0u1u2): link status up, enabling it in 200 ms
Dec 14 10:13:13 xps kernel: bond0: (slave enp87s0u1u2): invalid new link 3 on slave
Dec 14 10:13:13 xps kernel: bond0: (slave enp87s0u1u2): link status definitely up, 1000 Mbps full duplex
Dec 14 10:13:13 xps kernel: bond0: (slave enp87s0u1u2): making interface the new active one
Dec 14 10:13:13 xps kernel: bond0: (slave enp87s0u1u2): link status definitely down, disabling slave
Dec 14 10:13:13 xps kernel: bond0: (slave wlp164s0): making interface the new active one
Dec 14 10:13:21 xps kernel: bond0: (slave enp87s0u1u2): link status up, enabling it in 200 ms
Dec 14 10:13:21 xps kernel: bond0: (slave enp87s0u1u2): invalid new link 3 on slave
Dec 14 10:13:21 xps kernel: bond0: (slave enp87s0u1u2): link status definitely up, 1000 Mbps full duplex
Dec 14 10:13:21 xps kernel: bond0: (slave enp87s0u1u2): making interface the new active one
Dec 14 10:13:22 xps kernel: bond0: (slave enp87s0u1u2): link status definitely down, disabling slave
Dec 14 10:13:22 xps kernel: bond0: (slave wlp164s0): making interface the new active one
Dec 14 10:13:38 xps kernel: bond0: (slave enp87s0u1u2): link status up, enabling it in 200 ms
Dec 14 10:13:38 xps kernel: bond0: (slave enp87s0u1u2): link status up, enabling it in 200 ms
Dec 14 10:13:38 xps kernel: bond0: (slave enp87s0u1u2): invalid new link 3 on slave
Dec 14 10:13:39 xps kernel: bond0: (slave enp87s0u1u2): link status definitely up, 100 Mbps full duplex
Dec 14 10:13:39 xps kernel: bond0: (slave enp87s0u1u2): making interface the new active one
The network chipset is the same as the DA310 but I've not seen dropouts in the same fashion.
Bonding
Followingsystemd.link
we can override systemd
's persistent device naming scheme; this is particularly useful given that the same USB ethernet device plugged into a different port will present as a different ethernet device.
Prior to this, we need to ensure that the Dell BIOS is not performing MAC address pass through.
$ lsusb | grep Ethernet
Bus 006 Device 004: ID 0bda:8153 Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet Adapter
$ lsusb -v -s 006:004 | grep iMac
iMacAddress 3 8CEC4Bxxxxxx
# setup persistent name for TB16
$ cat > /etc/systemd/network/10-eth-tb16.link << EOF
[Match]
MACAddress=8c:ec:4b:xx:xx:xx
[Link]
Name=ethtb16
# force full 1gbit connection for sometimes the autoneg getting this wrong against a tplink gbit desktop switch
Duplex=full
BitsPerSecond=1000M
EOF
$ dmesg
...
[ 2183.450846] r8152 2-1.1:1.0 (unnamed net_device) (uninitialized): Invalid header when reading pass-thru MAC addr
[ 2183.469019] r8152 2-1.1:1.0: load rtl8153b-2 v1 10/23/19 successfully
[ 2183.497741] r8152 2-1.1:1.0 eth0: v1.12.11
[ 2183.522662] r8152 2-1.1:1.0 ethtb16: renamed from eth0
Now we have a consistent name for this device regardless of port this the TB16 is attached - this one consistent device name can be used for the bond interface instead of adding multiple devices to a bond even though they refer to the same physical device (just plugged in on different ports).
Monitors
The connectors appear to be in this preference, at least on Linux: full displayPort, mini-displayPort and HDMI (I didn't try the VGA connector). Hotplugging can be hit and miss and what I've noticed on powerup (via the dock's power button) is that the external screens do not receive a signal immediately.Cold booting by pressing the power button the dock wakes up the Dell laptop but the video output is not sent to the external screens, only on the (closed) laptop screen which is a pain as it will be sat at the
grub
menu on its countdown timer - the keyboard plugged into the dock works at this time so we know the dock is alive. Once the system starts to boot the connected monitors receive a data signal and things are mostly smooth after that point.The only way to force the use of external monitor from cold boot is to have the dock connected to the laptop with power supply removed/turned off at the wall - apply power at the wall automatically starts the boot process (no need to press the power button on the dock) and at this point the external monitor displays the POST and grub menus.
Turning off the monitor off and then on responds well with the system believing that display being unavailable and then reappearing which is useful as sometimes the monitor believes there is no signal from the dock (powering off/on monitor re-establishes the dispaly).
USB and Audio
The 3x USB 3.x ports coupled with the 2x USB2.x ports are welcome and I've not encountered any problems with them - I typically use the USB ports to connect a USB 3.x HDD and not suffered any issues. The Dell firemware refers to an ASMedia driver but the system reports a0424:5807 Microchip Technology, Inc. (formerly SMSC) Hub
Similarly for audio, this works fine on the dock for both headphones and lineout via the dock's
0bda:4014 Realtek audio chip
- it is also pretty low on audio noise footprint when there is no audio.
PulseAudio
: Combining the dock output
The dock has audio outputs in the form of a front headphone jack and also a rear line out jack - these two outputs will typically be recognised as two seperate outputs but it can useful to combine the two into a logical output; this will let you turn on speakers (rear line out) without having to reselect the output device.Whilst F35 is shipped with
Pipewire
it's not clear how to combine logical sinks but with PulseAudio
this is relatively simple with default configurations:
# reinstall pulseaudio
$ dnf swap --allowerasing pipewire-pulseaudio pulseaudio
$ dnf install pulseaudio-utils paprefs
$ dnf remove pipewire pipewire-pulseaudio wireplumber
# find the pulsedevice device names
$ pacmd list-sinks | grep -e 'index:' -e device.string -e 'name:'
index: 0
name: <alsa_output.usb-Plantronics_Plantronics_Blackwire_3210_Series_2FC9575B28134CEA815BE1C29F63D5D0-00.mono-fallback>
device.string = "hw:0"
index: 1
name: <alsa_output.usb-Generic_USB_Audio_200901010001-00.HiFi__hw_Dock_1__sink>
device.string = "_ucm0003.hw:Dock,1"
index: 2
name: <alsa_output.usb-Generic_USB_Audio_200901010001-00.HiFi__hw_Dock__sink>
device.string = "_ucm0003.hw:Dock"
...
# can take local user configuration: cp /etc/pulse/default.pa ~/.config/pulse/
# can make systemwide
$ cat > /etc/pulse/default.pa.d/dellwd.pa << EOF
load-module module-combine-sink slaves=alsa_output.usb-Generic_USB_Audio_200901010001-00.HiFi__hw_Dock_1__sink,alsa_output.usb-Generic_USB_Audio_200901010001-00.HiFi__hw_Dock__sink sink_name=dellwd15 sink_properties="device.description='Dell WD15 Dock' device.icon_name='audio-card-symbolic'"
set-default-sink dellwd15
EOF
$ systemctl --user restart pulseaudio
$ pacmd list-sinks | grep -e 'index:' -e device.string -e 'name:'
index: 0
name: <alsa_output.usb-Plantronics_Plantronics_Blackwire_3210_Series_2FC9575B28134CEA815BE1C29F63D5D0-00.mono-fallback>
device.string = "hw:0"
index: 1
name: <alsa_output.usb-Generic_USB_Audio_200901010001-00.HiFi__hw_Dock_1__sink>
device.string = "_ucm0003.hw:Dock,1"
index: 2
name: <alsa_output.usb-Generic_USB_Audio_200901010001-00.HiFi__hw_Dock__sink>
device.string = "_ucm0003.hw:Dock"
...
* index: 4
name: <dellwd15>
Whilst possible to create a simulatenous output device using paprefs
, this does not provide fine grained control and will put all output sinks into the combined sink, including the laptop speakers!
No comments:
Post a Comment