`playerctl` + `mpv` + `mpris` causes AwesomeWM to crash
When you have the mpris plugin installed on mpv and a playerctl signal active in the background, trying to open a video with mpv will freeze and crash AwesomeWM.
To reproduce:
- Install the
mprisplugin (https://github.com/hoyon/mpv-mpris) - Make sure there is an active, connected
playerctlsignal in your config - Open a video with
mpv
I made a minimal reproduction:
local gears = require("gears")
local lgi = require("lgi")
local wibox = require("wibox")
local widget = wibox.widget.textbox()
local Playerctl = lgi.Playerctl
gears.timer.delayed_call(function()
local manager = Playerctl.PlayerManager()
function manager:on_name_appeared(name)
local player = Playerctl.Player.new_from_name(name)
manager:manage_player(player)
function player:on_metadata(metadata)
if self:get_title() then
widget:set_text(self:get_artist() .. " – " .. self:get_title())
else
widget:set_text("-")
end
end
function player:on_playback_status()
if self:get_title() then
widget:set_text(self:get_artist() .. " – " .. self:get_title())
else
widget:set_text("-")
end
end
widget:connect_signal("button::press", function() player:play_pause() end)
end
end)
It seems that the issue only happens when you use Playerctl.PlayerManager. If you use Playerctl.Player directly, the issue no longer occurs. This is probably an upstream issue, but the repo has not been active for almost 2 years now...
EDIT: Oops sorry. I thought we were in the Awesome repository. Feel free to dismiss my comment.
Hello @musjj,
~~This issue sounds unrelated to Awesome.~~
LGI (https://github.com/lgi-devs/lgi) is a Lua binding to GObject based libraries. It can be used independently from Awesome. So you could try to make the minimal example be a simple script.
Also, when reporting issues, stack strace/error messages/logs are useful to understand what's going on.
No worries, that's actually helpful. This time, AwesomeWM didn't crash, but the player still took a long time to launch. So I looked at AwesomeWM's stderr and I found this:
2023-08-24 15:13:52 W: awesome: a_glib_poll:477: Last main loop iteration took
25.012281 seconds! Increasing limit for this warning to that value.
It looks like it got stuck in a loop somewhere? This might be an AwesomeWM issue, rather than playerctl, but I'm not so sure.
This error basically means that something blocked the Awesome process for a long period of time. It is problematic because while Awesome is blocked, the computer feels frozen to the user.
I guess the something blocking Awesome is the Payerctl stuff, but I also can't guarantee it's that. 🤷
The error disappears if I remove the playerctl part. So I guess either lgi or playerctl is the culprit here.