Ketika musik diputar menggunakan MPD melalui ncmpcpp, playlist akan terus diputar oleh mpd bahkan ketika aplikasi klien (ncmpcpp) ditutup. Ini dikarenakan mpd berjalan di deamon, tapi masalahnya kita kehilangan kontrol musik yang diputar jika ncmpcpp ditutup. Selain itu mpd tidak support mpris atau playerctl jadi tombol multimedia di keyboard jadi tidak berguna.

Untuk mengatasi masalah kontrol tersebut, kita bisa menggunakan bridge mpris (mpdris2) atau jika kita menggunakan dwm maka bisa memakai patch mpdcontrol.

Menggunakan mpdris2

Mpdris2 adalah bridge tombol mpris untuk MPD. Dengan menjalankan mpdris2 maka kita bisa mengkontrol mpd player menggunakan tombol media di keyboard tanpa perlu membuka mpd klien seperti ncmpcpp.

mpdris2 bisa diinstall melalui ubuntu repository seperti berikut:

sudo apt install mpdris2

Selanjutnya tinggal tambahkan mpd dan mpdris2 pada pengaturan startup aplikasi ubuntu dekstop dan gunakan tombol play, stop, next dan prev keyboard untuk mengkontrol mpd kapanpun setelah login ke ubuntu desktop.

Menggunakan Mpdris2 dengan DWM

Untuk menggunakan mpdris2 dengan dwm maka kamu perlu install playerctl:

sudo apt install playerctl

kemudian tambahkan mpd dan mpdris2 di config.def.h:

static const char *const autostart[] = {
	"slstatus", NULL,
	"mpd", NULL,
	"mpdris2", NULL,
	NULL /* terminate */
};

Jika kode konstan array autostart diatas belum ada berarti kamu perlu pakai patch cool autostart, yang sebelumnya telah dibahas di instalasi dwm.

Kemudian tambahkan keybinding multimedia key pada keyboard pada config.def.h dwm. seperti berikut:

  1. Menambahkan definisi keykode di dwm, keykode bisa dicari menggunakan perintah xev.
--- baris kode disembunyikan ---
	{ "[M]",      monocle },
	{ NULL,       NULL },
};

/* extra keyboard keys gunakan xev*/
#define XF86AudioPlay           0x1008ff14
#define XF86AudioStop           0x1008ff15
#define XF86AudioPrev           0x1008ff16
#define XF86AudioNext           0x1008ff17
  1. Tambahkan perintah playerctl di daftar command
--- baris kode disembunyikan ---
/* commands */
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
static const char *termcmd[]  = { "st", NULL };
static const char *playpause[] = { "playerctl", "play-pause", NULL };
static const char *stop[] = { "playerctl", "stop", NULL };
static const char *next[] = { "playerctl", "next", NULL };
static const char *prev[] = { "playerctl", "previous", NULL };
  1. Bind tombol keyboard dan perintahnya
--- baris kode disembunyikan ---
 	{ MODKEY|ShiftMask,  XK_q,            quit,           {0} },
    { 0,/*play pause*/   XF86AudioPlay,   spawn,  {.v = playpause } },
    { 0,/*stop*/         XF86AudioStop,   spawn,  {.v = stop } },
    { 0,/*next*/         XF86AudioNext,   spawn,  {.v = next } },
    { 0,/*previous*/     XF86AudioPrev,   spawn,  {.v = prev } },
};

Kompile dwm restart, kamu bisa play mpd ketika dwm dijalankan.

Kontrol MPD menggunakan DWM

Untuk kamu yang lebih suka menggunakan DWM sebagai kontrol mpd, maka kamu bisa menggunakan patch mpdcontrol yang dapat di download di halaman patch mpdcontrol dwm.

Kemudian patch seperti biasa:

patch -p1 < dwm-r1615-mpdcontrol.diff

Jika ada yang gagal patch-nya bisa baca cara memperbaiki patch dwm. Jika patchnya berhasil, lanjutkan install libmpdclient-dev dan kompile dwm.

sudo apt install libmpdclient-dev
rm -f config.h
sudo make clean install

Restart dwm, maka sekarang kamu bisa mengontrol mpd dari dwm. pastikan mpd sudah di tambahkan di list autostart. Default tombol kontrolnya yaitu:

  • MOD + ESC untuk play dan pause mpd
  • MOD + F1 untuk lagu sebelumnya
  • MOD + F2 untuk lagu selanjutnya

Tombol bisa di ganti sesuai keinginan di dwm config.def.h.

--- baris kode disembunyikan ---
 	{ MODKEY|ShiftMask, XK_q,      quit,           {0} },
	{ MODKEY,           XK_F1,     mpdchange,      {.i = -1} },
	{ MODKEY,           XK_F2,     mpdchange,      {.i = +1} },
	{ MODKEY,           XK_Escape, mpdcontrol,     {0} },
 };

Menggunakan keyboard media keys

Contoh konfigurasi untuk patch mpdcontrol menggunakan media key. Pada config.def.h tambahkan daftar definisi keykode:

--- baris kode disembunyikan ---
	{ "[M]",      monocle },
	{ NULL,       NULL },
};

/* extra keyboard keys gunakan xev*/
#define XF86AudioPlay           0x1008ff14
#define XF86AudioStop           0x1008ff15
#define XF86AudioPrev           0x1008ff16
#define XF86AudioNext           0x1008ff17

Kemudian ganti bind key default dari mpdcontrol:

--- baris kode disembunyikan ---
 	{ MODKEY|ShiftMask,  XK_q,            quit,       {0} },
    { 0,/*play pause*/   XF86AudioPlay,   mpdcontrol, {0} },
    { 0,/*stop*/         XF86AudioStop,   mpdcontrol, {0} },
    { 0,/*next*/         XF86AudioNext,   mpdchange,  {.i = +1} },
    { 0,/*previous*/     XF86AudioPrev,   mpdchange,  {.i = -1} },
};