# w Drop-in replacement for `w(1)` on systems with **procps-ng 4.x**. ## Problem procps-ng 4.0 rewrote `w` to read from `/proc` instead of utmp, but the process→session→tty mapping is broken. On a typical SSH login you get: ``` USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT andreas 192.168.10.11 12:52 2:17 0.00s ? sshd: andreas [priv] andreas 192.168.10.11 12:52 2:17 0.00s ? sshd: andreas [priv] ``` Three bugs in one: | Column | Bug | Root cause | |--------|-----|------------| | TTY | blank | utmp never read | | IDLE | same for everyone | can't stat the tty without knowing its name | | WHAT | shows `sshd: [priv]` | picks the SSH privilege-separation parent instead of the user's shell | ## Solution This script reads the right sources directly: - **utmp** via `who -u` — correct TTY name, login time, source host - **`/dev/` atime** — real idle time - **`/proc/pid/stat` `tpgid` field** — kernel's own record of each tty's foreground process group, used for JCPU/PCPU/WHAT (no `TIOCGPGRP` ioctl needed, which would fail on terminals we don't own anyway) ## Example output ``` 13:07:07 up 15 min, 3 users, load average: 0.05, 0.10, 0.09 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT andreas pts/0 192.168.10.11 12:52 1:54 0.0s 0.0s -bash andreas pts/1 192.168.10.11 12:52 0s 37.5s 37.5s claude stephan pts/2 192.168.10.165 13:02 1s 0.0s 0.0s -bash ``` ## Install ```sh cp w ~/bin/w chmod +x ~/bin/w ``` Make sure `~/bin` appears before `/usr/bin` in your `PATH`. ## Requirements Python 3.6+, `who`, `uptime` — all standard on any Linux system. Tested on Ubuntu 24.04 (Noble) with procps-ng 4.0.4.