ThinkPad docks

From ArchWiki

Business laptops manufactured by Lenovo and IBM under the ThinkPad brand have a proprietary connector at the bottom of the laptop that is used in junction with docking stations that enable the ThinkPad to be used as a desktop PC.

These docking stations can function in two ways:

  • Passive port replicators (no active components)
  • Active docks (active components such as USB hubs or USB 3.0 controllers)

Both of them are supported out-the-box by GNOME and KDE and should not require additional software. Otherwise you can use dockd.

Note:
  • Some modern ThinkPads with exotic NVIDIA graphics like the Quadro M2200 might not work with dockdAUR because the NVIDIA driver is buggy and causes a kernel crash. See Issue #3 on Github
  • If you are using a different environment than GNOME or KDE and you are connecting the dock through a thunderbolt connector, you may have to authorize the use of the thunderbolt device before you can use the dock. You can use bolt or tbtAUR to authorize devices. See Thunderbolt for more information.

Using dockd

To handle docks outside KDE and GNOME you will need to install a dock daemon that will auto-switch the monitors. dockdAUR is a dock daemon that was developed for light desktops and will auto switch the monitor configuration.

Warning: dockd is not Coreboot/Libreboot compatible.

Installing

Install the dockdAUR package.

Note: If your current desktop environment switches the displays automatically you do not need this program.

The daemon needs to know your current display configuration when the laptop is docked and undocked, so we need to configure the daemon first before using it.

  • Insert your ThinkPad into the dock
  • Configure the display layouts and resolutions using your desktop environments interface or xrandr
  • Write the profile when the ThinkPad is docked
# dockd --config docked
  • Remove the ThinkPad from the dock
  • Configure the internal panel resolution and refresh rates using your desktop environments interface or xrandr
  • Write the profile when the ThinkPad is undocked
# dockd --config undocked
  • Start/enable acpid.service (see acpid if needed).
  • If you are using i3, you need to manual autostart dockd as i3 is not XDG Autostart compatible
~/.config/i3/config
 exec --no-startup-id dockd --daemon
  • Log out and log back in

The daemon should now be configured and ready to use. Insert the ThinkPad into the dock and observe if the daemon switches to your external display automatically.

Note: If it does not switch output modes automatically, that means your system or configuration is not supported. Please, open an issue on GitHub with your ThinkPad and dock model, as well as the journalctl output.
Warning: If you change your monitor setup or resolution, you MUST configure the daemon again.

Dock and undock hooks

As of dockd 1.21, you can define some hooks that run when the ThinkPad is docked and undocked.

For example, to disable WiFi when docking and enable it when undocking:

Note: dockd runs as non-root, so these scripts have to be executable by the user.
/etc/dockd/dock.hook
nmcli radio wifi off
/etc/dockd/undock.hook
nmcli radio wifi on

Troubleshooting headset microphone on 4X10E52935 dock

This dock appears to use an OMTP standard wiring for the headset connector instead of the more common CTIA standard. Thus the pins (from tip to sleeve) are left channel, right channel, microphone, ground instead of left channel, right channel, ground, microphone. Adapters can be found by searching "3.5mm OMTP to CTIA adapter" on your favorite e-commerce site.

USB issues while docked

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: RUNTIME_PM_ALL was removed from TLP a couple of years ago. Snippet below seems to be adapted from a very old configuration file (e.g., TLP 0.9 configuration). Should be updated to reflect the latest TLP configuration (version 1.4.0 as of writing). (Discuss in Talk:ThinkPad docks)

If you run TLP and your USB device experience disconnect or erratic behaviour when docked while booted on battery you might want to change the following setting:

/etc/tlp.conf
# Runtime Power Management for PCI(e) bus devices: on=disable, auto=enable
RUNTIME_PM_ON_AC=on
RUNTIME_PM_ON_BAT=on

# Runtime PM for *all* PCI(e) bus devices, except blacklisted ones:
#   0=disable, 1=enable
RUNTIME_PM_ALL=0

Then reload the configuration by running tlp start with root privileges.

See also