Qoob: a foobar-like music player for Linux


Main features include:

  • Folder structure library organization
  • Metadata is parsed from file header when available
  • Missing metadata is guessed with regex, from title and folder structure
  • Realtime library filter to quickly find a specific media
  • Tray icon with playback control and notifications
  • Customizable notification and title format
  • Customizable sorting routine
  • Hotkeys and command line interface

Please have a look on the Gitlab page for screenshots and more details :slight_smile:




But I see no album art in any of the screenshots.


Just the way I like it :smirk:

I’ve been waiting for something like this in QT for a while. Full library and QT … it didnt seem too much to ask. Thanks @alfalfa I’ll give it a spin over the next couple of days and see if I can (finally) rip rhythmbox from my partners system.

One thing I do notice from the screens is that there doesnt seem to be any volume slider. Is that true ?


There is no volume slider nor art viewer for now. The app is fairly young and I wanted to fix the core features first. The refactoring of the whole code took a while, but as the code is well structured now it will be much easier to maintain and improve in the future. There is a long todo list for the months to come :slight_smile:


Fresh install of qoob-git and returns:

malloc_consolidate(): invalid chunk size
Aborted (core dumped)

Core Dump
[~]$ coredumpctl list
TIME                            PID   UID   GID SIG COREFILE  EXE
Thu 2018-11-15 16:07:41 PST   26925  1000  1000   6 none      /usr/bin/python3.7
Thu 2018-11-15 16:07:53 PST   26936  1000  1000   6 none      /usr/bin/python3.7
[~]$ coredumpctl info 26936
           PID: 26936 (qoob)
           UID: 1000 (X)
           GID: 1000 (X)
        Signal: 6 (ABRT)
     Timestamp: Thu 2018-11-15 16:07:52 PST (3min 39s ago)
  Command Line: /bin/python /bin/qoob
    Executable: /usr/bin/python3.7
 Control Group: /user.slice/user-1000.slice/session-2.scope
          Unit: session-2.scope
         Slice: user-1000.slice
       Session: 2
     Owner UID: 1000 (X)
       Boot ID: 3abf0d6b276f40349916662cf70c06f4
    Machine ID: 81c8e6bf8a51453bb83798bdf44212a2
      Hostname: XX
       Storage: none
       Message: Process 26936 (qoob) of user 1000 dumped core.
                Stack trace of thread 26936:
                #0  0x00007f1638e26d7f raise (libc.so.6)
                #1  0x00007f1638e11672 abort (libc.so.6)
                #2  0x00007f1638e69878 __libc_message (libc.so.6)
                #3  0x00007f1638e7018a malloc_printerr (libc.so.6)
                #4  0x00007f1638e7048a malloc_consolidate (libc.so.6)
                #5  0x00007f1638e72f58 _int_malloc (libc.so.6)
                #6  0x00007f1638e74ada malloc (libc.so.6)
                #7  0x00007f1637170a24 _ZN10QArrayData8allocateEmmm6QFlagsINS_16All>
                #8  0x00007f1637172a01 _ZN10QByteArrayC2EiN2Qt14InitializationE (li>
                #9  0x00007f16371db869 _ZN11QRingBuffer7reserveEx (libQt5Core.so.5)
                #10 0x00007f1637267fc7 _ZN16QIODevicePrivate4readEPcxb (libQt5Core.>
                #11 0x00007f16372697ab _ZN9QIODevice7getCharEPc (libQt5Core.so.5)
                #12 0x00007f16281b2be3 n/a (libKF5Crash.so.5)
                #13 0x00007f16281b2671 _ZN6KCrash10initializeEv (libKF5Crash.so.5)
                #14 0x00007f163732165d _Z14qAddPreRoutinePFvvE (libQt5Core.so.5)
                #15 0x00007f163901654a call_init.part.0 (ld-linux-x86-64.so.2)
                #16 0x00007f163901664a _dl_init (ld-linux-x86-64.so.2)
                #17 0x00007f163901a533 dl_open_worker (ld-linux-x86-64.so.2)
                #18 0x00007f1638f26f57 _dl_catch_exception (libc.so.6)
                #19 0x00007f1639019dff _dl_open (ld-linux-x86-64.so.2)
                #20 0x00007f1638a7215a n/a (libdl.so.2)
                #21 0x00007f1638f26f57 _dl_catch_exception (libc.so.6)
                #22 0x00007f1638f26ff3 _dl_catch_error (libc.so.6)
                #23 0x00007f1638a728bf n/a (libdl.so.2)
                #24 0x00007f1638a721fa dlopen (libdl.so.2)
                #25 0x00007f163731a56e n/a (libQt5Core.so.5)
                #26 0x00007f16373141b6 n/a (libQt5Core.so.5)
                #27 0x00007f1637314781 n/a (libQt5Core.so.5)
                #28 0x00007f163730a661 _ZNK14QFactoryLoader8instanceEi (libQt5Core.>
                #29 0x00007f163345b5d3 _ZN21QPlatformThemeFactory6createERK7QString>
                #30 0x00007f16334655b1 _ZN22QGuiApplicationPrivate25createPlatformI>
                #31 0x00007f163346642e _ZN22QGuiApplicationPrivate21createEventDisp>
                #32 0x00007f1637324a35 _ZN23QCoreApplicationPrivate4initEv (libQt5C>
                #33 0x00007f1633467650 _ZN22QGuiApplicationPrivate4initEv (libQt5Gu>
                #34 0x00007f1631b9bb9a _ZN19QApplicationPrivate4initEv (libQt5Widge>
                #35 0x00007f16322237fa n/a (QtWidgets.so)
                #36 0x00007f16322238da n/a (QtWidgets.so)
                #37 0x00007f163766083c n/a (sip.so)
                #38 0x00007f1638bf706c _PyObject_FastCallKeywords (libpython3.7m.so>
                #39 0x00007f1638c3b5e9 _PyEval_EvalFrameDefault (libpython3.7m.so.1>
                #40 0x00007f1638b84879 _PyEval_EvalCodeWithName (libpython3.7m.so.1>
                #41 0x00007f1638bcabe2 _PyFunction_FastCallKeywords (libpython3.7m.>
                #42 0x00007f1638c3abf4 _PyEval_EvalFrameDefault (libpython3.7m.so.1>
                #43 0x00007f1638bcaa3b _PyFunction_FastCallKeywords (libpython3.7m.>
                #44 0x00007f1638c3676d _PyEval_EvalFrameDefault (libpython3.7m.so.1>
                #45 0x00007f1638b84879 _PyEval_EvalCodeWithName (libpython3.7m.so.1>
                #46 0x00007f1638b857a4 PyEval_EvalCodeEx (libpython3.7m.so.1.0)
                #47 0x00007f1638b857cc PyEval_EvalCode (libpython3.7m.so.1.0)
                #48 0x00007f1638cae1e4 n/a (libpython3.7m.so.1.0)
                #49 0x00007f1638caf6ee PyRun_FileExFlags (libpython3.7m.so.1.0)
                #50 0x00007f1638cb2c45 PyRun_SimpleFileExFlags (libpython3.7m.so.1.>
                #51 0x00007f1638cb4f43 n/a (libpython3.7m.so.1.0)
                #52 0x00007f1638cb514c _Py_UnixMain (libpython3.7m.so.1.0)
                #53 0x00007f1638e13223 __libc_start_main (libc.so.6)
                #54 0x000055915646205e _start (python3.7)
                Stack trace of thread 26937:
                #0  0x00007f1638edfc21 __poll (libc.so.6)
                #1  0x00007f1636848ee0 n/a (libglib-2.0.so.0)
                #2  0x00007f1636848fce g_main_context_iteration (libglib-2.0.so.0)
                #3  0x00007f1637370fc9 _ZN20QEventDispatcherGlib13processEventsE6QF>
                #4  0x00007f163731c8cc _ZN10QEventLoop4execE6QFlagsINS_17ProcessEve>
                #5  0x00007f1637165eb9 _ZN7QThread4execEv (libQt5Core.so.5)
                #6  0x00007f16375c2ba6 n/a (libQt5DBus.so.5)
                #7  0x00007f163716ff65 n/a (libQt5Core.so.5)
                #8  0x00007f1638fbaa9d start_thread (libpthread.so.0)
                #9  0x00007f1638eeab23 __clone (libc.so.6)
                Stack trace of thread 26938:
                #0  0x00007f1638edfc21 __poll (libc.so.6)
                #1  0x00007f1632a5a630 n/a (libxcb.so.1)
                #2  0x00007f1632a5c2db xcb_wait_for_event (libxcb.so.1)
                #3  0x00007f162be97c5a n/a (libQt5XcbQpa.so.5)
                #4  0x00007f163716ff65 n/a (libQt5Core.so.5)
                #5  0x00007f1638fbaa9d start_thread (libpthread.so.0)
                #6  0x00007f1638eeab23 __clone (libc.so.6)


Does it crash during the install, or the app cannot launch?

I would need more details to help you. I just installed it with ‘yaourt -S qoob-git’, on a fresh and updated manjaro install (virtual box, gnome DE). It build and install as intented…

This seems like a glibc error, maybe it is caused by an aur helper?


I supplied the coredump, which I thought would be the most helpful, I’m not sure what else to provide so let me know what you might need.
I guess I could mention it was installed using yay and the DE is KDE.
I will do a manual makepkg and let you know…


A python error would be the most helpful, if any. I don’t know what to do with the coredump, as the error seems to be outside the scope of qoob. Looking at it, I assume that you did not encounter the error during the install, but that when you ran qoob from the command line it crashed.

The error seems related to this topic Formerly working Python script fails in various ways . It happen that the OP is also using KDE, so there might be something there. I will try to reproduce the bug on a fresh Manjaro KDE later on…


I get the same errors.

malloc_consolidate(): invalid chunk size
[1]    18051 abort (core dumped)  qoob


Same scenario with manual makepkg, not an AUR helper issue.
(which btw would be more likely with yaourt as it is the warned-against and unmaintained helper)


I could reproduce the bug on a fresh install of Manjaro KDE Edition. For some reason, KDE does not allow an empty list to be passed in QApplication. Therefore I replaced

    app = QtWidgets.QApplication([])


    app = QtWidgets.QApplication([''])

Problem solved.


My hero :heart: my script now runs. It broke around 23/10/2018…

@fhdk @Photon wonder what changed?

Back on topic:

  • The icons are not showing up with a dark theme on KDE

  • Adding a new folder is a bit quirky and not intuitive.


I am not entirely sure of the reason you addressed me?


You tried to help me on my original “my script doesn’t work anymore thread”

This fixes it.


@alfalfa - there is something wrong in your package build, every time I update aur, it updates and re-installs the same version.

warning: qoob-git-r30.6f23738-1 is up to date -- skipping

I know nothing about pkgbuilds :wink:


In short the pkgbuild have version set as 0 (pkgver=0) @alfalfa should update the version using makepkg

Also in pkgver() set -o pipefail is not in reccomended procedure https://wiki.archlinux.org/index.php/VCS_package_guidelines#Git


There will be a light icon theme in the next release. It will look good with your theme :slight_smile:

Could you be more specific about that? By default it should find your music folder (according to xdg). Then you only need to add the root folders of your others libraries, if any, and they will be added to the scan queue. It will interpret the subdirectory as artist, them album (libRoot/artist/album/title).

I agree this is annoying, but I was told that it is the expected behavior for a vcs (-git) package. See this post and below https://bbs.archlinux.org/viewtopic.php?pid=1765024#p1765024

The pkgver() I used come from the article you linked (last of the list). Please enlight me if you know of a better way to maintain a git package.


One way of doing it

pkgver() {
  cd "$pkgname"
  printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"


Thank you for the suggestion, if it is best practice to avoid the pipefail I don’t mind removing it, but I was referring to the package being always flagged as outdated. I noticed that other git package don’t do this, but I am a little puzzled, as I did the PKGBUILD just like I was told by experienced packagers on the Arch forum. I am considering doing official releases, but already it is quite time consuming to be an upstream developper for five projects, and packaging is mostly a chore IMO.


I have my music folder on a seperate drive under /home/media

I will wait till the next release to explain, it may have been the lack of visible icons that caused the problem :grin: