clangen / musikcube

a cross-platform, terminal-based music player, audio engine, metadata indexer, and server in c++
https://musikcube.com
BSD 3-Clause "New" or "Revised" License
4.08k stars 295 forks source link

playerctl ( mpris ) does not work with musikcube on systemd-free distribution #668

Open jvc84 opened 3 months ago

jvc84 commented 3 months ago

I tried to use playerctl to control musikcube playback, but on Artix musikcube didn't provide any mpris interface. Muiskcube mpris plugin supports libelogind instead of libsystemd but you need to replace it manually.

Installation of musikcube with mpris support on systemd-free distribution (originals of changed files will be saved as <filename>.<extention>.bak):

  1. Install musikcube from source:

    git clone https://github.com/clangen/musikcube.git --recursive 
    cd musikcube
  2. Replace libsystemd requirement with libelogind:

    sed -i.bak 's/libsystemd/libelogind/g' src/plugins/mpris/CMakeLists.txt

    optional:

    sed -i.bak 's/libsystemd-dev/libelogind/g' script/install-deps.sh
  3. Build according to this instruction: Install dependencies.

    cmake -G "Unix Makefiles" .
    make

    Troubleshooting:

    3.1 itemListMap

    Solution: replace itemListMap with itemMap in src/plugins/taglib_plugin/TaglibMetadataReader.cpp:

       sed -i.bak 's/itemListMap/itemMap/g' src/plugins/taglib_plugin/TaglibMetadataReader.cpp
       make

    3.2 <ncursesw/curses.h> / <ncursesw/panel.h>

    Solution: According to the instruction "you should invoke CMake with the -DNO_NCURSESW flag as follows: cmake -DNO_NCURSESW . instead of the more standard cmake . ", but it gives error:

       CMake Error: Parse error in command line argument: NO_NCURSESW
       Should be: VAR:type=value

    so you should remove ncursesw/ from #include:

       sed -i.bak 's/ncursesw\///g' src/musikcube/cursespp/cursespp/curses_config.h 
       make   

    After make completed:

    sudo make install      
  4. After installation libmpris.so may not appear in /usr/local/share/musikcube/plugins or /usr/share/musikcube/plugins. In this case:

    sudo cp bin/plugins/libmpris.so /usr/local/share/musikcube/plugins 
    sudo cp bin/plugins/libmpris.so /usr/share/musikcube/plugins 
    reboot 

You can check if mpris plugin is running in musikcube: settings>configure plugins - it should contain string:

[x] MPRIS interface (libmpris.so)  ...

That's it. I hope this helps someone. Also share improvements of my instruction if you faced any other issues.

Gerodote commented 2 months ago

It works, but you need to compile musikcube with specfic cmake flags. For openrc and other elogind related: -DUSE_ELOGIND=true .

Some times ago I wrote ebuild for gentoo and it was adapted with another patch to make it link against ncurses better, thanks to some smart guys. You can see some useful stuff there . For example, if you need mpris, it depends on your service-system : if systemd , then don't add anything, because it's default, if elogind, add the mentioned flag, if basu (*BSD OSs), then another flag.

You can see the gentoo's ebuild here, for example: https://gpo.zugaina.org/AJAX/Ebuild/54112928/View