Adding onto Paul's other answer, you can access the Windows adb server from Ubuntu to resolve this, but it works if and only if the two adb binaries use the same TCP protocol version. For example, adb 7.0.0+r33-2 in Bionic will work with platform-tools 24.0.4 on Windows.
If you have a different version, my first step was just running adb in Windows as he suggests:
> adb kill-server //if it is already running under bash shell
> adb start-server
And then in Ubuntu:
$ adb devices
If the binary protocol versions mismatch, then after running adb in Ubuntu an error is output that gives enough information to get the right binary:
adb server version (40) doesn't match this client (36); killing...
In this example, the server is using protocol version 40, and Ubuntu's package is using version 36. So, one approach is to get a version of adb on Windows that is 4 major releases earlier than the one you have. You can review the platform-tools release notes to find the latest minor version of the needed major version. At the time of this writing, the major version number of platform-tools is 12 lower than the protocol version number of adb, so for protocol version 36 as in this example, we would want platform-tools version 24.0.4 (which is 4 less than 28.0.1, which had protocol version 40). This version number can be used to hand-craft a download url for platform-tools of the needed version.
https://dl.google.com/android/repository/platform-tools_r24.0.4-windows.zip
change to correct version here----^
Download and unpack this archive, and rerun adb from cmd:
> adb kill-server
> adb start-server
Now adb will work from Ubuntu.