Spotify on Linux

I’ve been trying to use command-line tools more often recently, and that includes my music software. For a long time, I was using the official Spotify client for linux, with an AUR package here. This was fine for a while, but I really wanted to be able to use it on the commandline. This post is documentation on where I went with this.


I started by doing a search for “spotify tui”. This led me to a number of options, but the only standalone one I could find was ncspot, a TUI written in Rust. I used cargo install to build and compile ncspot, and was presented with a screen allowing me to enter my username and password.

Following that, I was shown to the main screen, which looks like this:

ncspot main page

I could use the arrow keys or hjkl to navigate the tabs and songs, and F1, F2, and F3 to navigate the different contexts1. The keybindings were a bit confusing (Shift-p to toggle playback, and >/< to skip songs).

This is what the album view looked like: ncspot album view

This worked well for me, for a little while. Eventually I got tired of not being able to control it from my phone or control other devices from my laptop.

Enter Spotifyd

For those who don’t know, Spotifyd is an open source spotify client that runs as a system service. Its major benefit to me is the ability to use Spotify Connect to control or be controlled by other devices like my phone. Spotifyd is part of the AUR for different audio backends, so the install was a simple yay -S spotifyd-pulseaudio.

Following the documentation at the project’s github, I filled out a configuration file, which is tracked in my dotfiles repository. My password is tracked by pass, so I can put that command in the configuration file without worrying about my password getting leaked into git. There’s also a systemd service, that I placed in my .config/systemd folder to run as a user service.

With spotifyd enabled and running, I found a frontend in spotify-tui, another TUI written in Rust. I followed the README directions and created my OAuth application. With my Client ID/Secret in hand, I managed to authenticate with the Spotify API and could select devices.

One of the advantages of spotifytui over ncspot at least is that it supports Spotify Connect, so that I can control both the spotifyd service running on my laptop and any other clients running on my network, including my phone.

The main layout of spotify-tui looks like this: spotify-tui main layout

Overall I like spotify-tui a lot more than ncspot, but I’m keeping it on my system in case I need to run multiple clients at once.

spotify-tui is available in the AUR as yay -S spotify-tui.

  1. Queue, Search, and Library, respectively ↩︎

Have a comment or question on one of my posts? Start a discussion in my public inbox by sending an email to ~muirrum/ If you are unfamiliar with mailing lists, start with mailing list etiquette. Otherwise just shoot me an email to my address which is linked in the sidebar.

Articles from blogs I follow is more concerned with Google's interests than good engineering sucks. It’s certainly prettier than, but under the covers, it’s a failure of engineering characteristic of the Google approach. Go is a pretty good programming language. I have long held that this is not attributable to Google’s stewards…

via Drew DeVault's Blog August 1, 2020
Announcing Rust 1.45.1

The Rust team is happy to announce a new version of Rust, 1.45.1. Rust is a programming language that is empowering everyone to build reliable and efficient software. If you have a previous version of Rust installed via rustup, getting Rust 1.45.1 is as easy …

via Rust Blog July 30, 2020
Status update, July 2020

Hi all! It’s time for another monthly status update. Yesterday I’ve released wlroots 0.11.0 and Sway 1.5! This is a pretty big release, with lots of new features and bug fixes. New features include headless outputs that can be created on-the-fly (one use-cas…

via emersion July 21, 2020

Generated by openring