Skip to content

No reaction to keyboard, pointer, touch, and/or stylus/pen when run barebones in pure TTY-stream deficient DRM envrionments #18719

Description

@mplevako

mpv Information

mpv v0.41.0 Copyright © 2000-2025 mpv/MPlayer/mplayer2 projects
 built on Aug 28 2026 19:44:41
libplacebo version: v7.360.1
FFmpeg version: n9.0.1 (runtime n9.0.2)
FFmpeg library versions:
   libavcodec      63.1.101 (runtime 63.1.102)
   libavdevice     63.1.101 (runtime 63.1.102)
   libavfilter     12.1.101 (runtime 12.1.102)
   libavformat     63.1.101 (runtime 63.1.102)
   libavutil       61.1.101 (runtime 61.1.102)
   libswresample   7.1.101 (runtime 7.1.102)
   libswscale      10.1.101 (runtime 10.1.102)

Other Information

- Linux version: Arch Linux
- Kernel Version: 7.2.11-arch1-1
- GPU Model: not relevant, reproduces even with --no-video
- Mesa/GPU Driver Version: Mesa 26.2.5-1, but not relevant
- Window Manager and Version: no window manager or compositor, the environment can be reproduced with kmscon-launch-gui for example
- Source of mpv: pacman/extra

evdev is present, consider the environment TTY-stream deficient.

Reproduction Steps

When run barebones in pure TTY-stream deficient DRM envrionments (e.g. when run via kmscon-launch-gui, the standard and only way of running another "GUI" program in kmscon) mpv doesn't react to keyboard and pointer/click events and it's impossible even to quit or close it normally.

Expected Behavior

I expected mpv to react to at least keyboard events and perform the bound actions like seek, speed, quit, etc, as it does when, e.g., run without kmscon-launch-gui (in that case with --no-video option obviously).

Actual Behavior

There was no reaction. Had to kill the process.

Log File

[ 0.002][v][cplayer] mpv v0.41.0 Copyright © 2000-2025 mpv/MPlayer/mplayer2 projects
[ 0.002][v][cplayer] built on Aug 28 2026 19:44:41
[ 0.002][v][cplayer] libplacebo version: v7.360.1
[ 0.002][v][cplayer] FFmpeg version: n9.0.1 (runtime n9.0.2)
[ 0.002][v][cplayer] FFmpeg library versions:
[ 0.002][v][cplayer] libavcodec 63.1.101 (runtime 63.1.102)
[ 0.002][v][cplayer] libavdevice 63.1.101 (runtime 63.1.102)
[ 0.002][v][cplayer] libavfilter 12.1.101 (runtime 12.1.102)
[ 0.002][v][cplayer] libavformat 63.1.101 (runtime 63.1.102)
[ 0.002][v][cplayer] libavutil 61.1.101 (runtime 61.1.102)
[ 0.002][v][cplayer] libswresample 7.1.101 (runtime 7.1.102)
[ 0.002][v][cplayer] libswscale 10.1.101 (runtime 10.1.102)
[ 0.002][v][cplayer] Configuration: -Dbuildtype=plain -Dprefix=/usr -Dlibexecdir=lib -Dsbindir=bin -Dauto_features=auto -Dwrap_mode=nodownload -Db_pie=true -Dpython.bytecompile=1 -Dlibmpv=true -Dgl-x11=enabled -Dcaca=disabled -Dcdda=enabled -Ddrm=enabled -Ddvbin=enabled -Ddvdnav=enabled -Dlibarchive=enabled -Dopenal=enabled -Dsdl2-audio=enabled -Dsdl2-video=enabled -Dsdl2-gamepad=enabled
[ 0.002][v][cplayer] List of enabled features: alsa build-date cdda cplugins cuda-hwaccel cuda-interop dmabuf-interop-gl dmabuf-wayland drm dvbin dvdnav egl egl-drm egl-wayland egl-x11 ffmpeg ffnvcodec gbm gl gl-x11 glibc-thread-name glob glob-posix gpl iconv jack javascript jpeg lcms2 libarchive libass libavdevice libbluray libdl libplacebo linux-fstatfs luajit memfd-create memrchr openal pipewire posix posix-shm ppoll pthread-condattr-setclock pulse rubberband rubberband-3 sdl2-audio sdl2-gamepad sdl2-video sixel sndio sndio-1-9 uchardet vaapi vaapi-drm vaapi-wayland vaapi-x11 vdpau vdpau-gl-x11 vector vk-khr-display vt.h vulkan wayland wayland-protocols-1-32 wayland-protocols-1-38 wayland-protocols-1-39 wayland-protocols-1-41 wayland-protocols-1-44 wayland-protocols-1-47 x11 x11-clipboard xv zimg zimg-st428 zlib
[ 0.002][v][cplayer] Command line options: '--no-config' '--gpu-debug' '--log-file=./output.txt' '--no-video' './test.mp4'
[ 0.002][v][cplayer] mpv v0.41.0 Copyright © 2000-2025 mpv/MPlayer/mplayer2 projects
[ 0.002][v][cplayer] built on Aug 28 2026 19:44:41
[ 0.002][v][cplayer] libplacebo version: v7.360.1
[ 0.002][v][cplayer] FFmpeg version: n9.0.1 (runtime n9.0.2)
[ 0.002][v][cplayer] FFmpeg library versions:
[ 0.002][v][cplayer] libavcodec 63.1.101 (runtime 63.1.102)
[ 0.002][v][cplayer] libavdevice 63.1.101 (runtime 63.1.102)
[ 0.002][v][cplayer] libavfilter 12.1.101 (runtime 12.1.102)
[ 0.002][v][cplayer] libavformat 63.1.101 (runtime 63.1.102)
[ 0.002][v][cplayer] libavutil 61.1.101 (runtime 61.1.102)
[ 0.002][v][cplayer] libswresample 7.1.101 (runtime 7.1.102)
[ 0.002][v][cplayer] libswscale 10.1.101 (runtime 10.1.102)
[ 0.002][v][cplayer] Configuration: -Dbuildtype=plain -Dprefix=/usr -Dlibexecdir=lib -Dsbindir=bin -Dauto_features=auto -Dwrap_mode=nodownload -Db_pie=true -Dpython.bytecompile=1 -Dlibmpv=true -Dgl-x11=enabled -Dcaca=disabled -Dcdda=enabled -Ddrm=enabled -Ddvbin=enabled -Ddvdnav=enabled -Dlibarchive=enabled -Dopenal=enabled -Dsdl2-audio=enabled -Dsdl2-video=enabled -Dsdl2-gamepad=enabled
[ 0.002][v][cplayer] List of enabled features: alsa build-date cdda cplugins cuda-hwaccel cuda-interop dmabuf-interop-gl dmabuf-wayland drm dvbin dvdnav egl egl-drm egl-wayland egl-x11 ffmpeg ffnvcodec gbm gl gl-x11 glibc-thread-name glob glob-posix gpl iconv jack javascript jpeg lcms2 libarchive libass libavdevice libbluray libdl libplacebo linux-fstatfs luajit memfd-create memrchr openal pipewire posix posix-shm ppoll pthread-condattr-setclock pulse rubberband rubberband-3 sdl2-audio sdl2-gamepad sdl2-video sixel sndio sndio-1-9 uchardet vaapi vaapi-drm vaapi-wayland vaapi-x11 vdpau vdpau-gl-x11 vector vk-khr-display vt.h vulkan wayland wayland-protocols-1-32 wayland-protocols-1-38 wayland-protocols-1-39 wayland-protocols-1-41 wayland-protocols-1-44 wayland-protocols-1-47 x11 x11-clipboard xv zimg zimg-st428 zlib
[ 0.002][d][global] home path: '' -> '-'
[ 0.002][d][global] user path: '~~home/' -> ''
[ 0.002][d][global] user path: '~~old_home/' -> ''
[ 0.002][v][cplayer] Setting option 'config' = 'no' (flags = 8)
[ 0.002][v][cplayer] Setting option 'gpu-debug' = '' (flags = 8)
[ 0.002][v][cplayer] Setting option 'log-file' = './output.txt' (flags = 8)
[ 0.002][v][cplayer] Setting option 'video' = 'no' (flags = 8)
[ 0.006][d][osc] Loading lua script @osc.lua...
[ 0.006][d][ytdl_hook] Loading lua script @ytdl_hook.lua...
[ 0.007][d][stats] Loading lua script @stats.lua...
[ 0.007][d][console] Loading lua script @console.lua...
[ 0.007][d][auto_profiles] Loading lua script @auto_profiles.lua...
[ 0.007][d][osc] loading mp.defaults
[ 0.007][d][ytdl_hook] loading mp.defaults
[ 0.007][d][select] Loading lua script @select.lua...
[ 0.007][d][stats] loading mp.defaults
[ 0.007][d][positioning] Loading lua script @positioning.lua...
[ 0.007][d][commands] Loading lua script @commands.lua...
[ 0.007][d][auto_profiles] loading mp.defaults
[ 0.008][d][positioning] loading mp.defaults
[ 0.008][d][ytdl_hook] loading @ytdl_hook.lua
[ 0.008][d][context_menu] Loading lua script @context_menu.lua...
[ 0.009][v][clipboard] Initialized vo clipboard backend.
[ 0.009][d][stats] loading @stats.lua
[ 0.009][v][cplayer] Waiting for scripts...
[ 0.010][d][commands] loading mp.defaults
[ 0.011][d][positioning] loading @positioning.lua
[ 0.011][d][osc] loading @osc.lua
[ 0.011][d][positioning] reading options for positioning
[ 0.011][d][positioning] script-opts/positioning.conf not found.
[ 0.011][d][positioning] lua-settings/positioning.conf not found.
[ 0.011][d][cplayer] Run command: define-section, flags=64, args=[name="input_positioning", contents="", flags="default"]
[ 0.011][d][cplayer] Run command: enable-section, flags=64, args=[name="input_positioning", flags="allow-hide-cursor+allow-vo-dragging"]
[ 0.011][d][cplayer] Run command: define-section, flags=64, args=[name="input_forced_positioning", contents="", flags="force"]
[ 0.011][d][cplayer] Run command: enable-section, flags=64, args=[name="input_forced_positioning", flags="allow-hide-cursor+allow-vo-dragging"]
[ 0.011][d][select] loading mp.defaults
[ 0.012][d][auto_profiles] loading @auto_profiles.lua
[ 0.012][d][ytdl_hook] reading options for ytdl_hook
[ 0.012][d][ytdl_hook] script-opts/ytdl_hook.conf not found.
[ 0.012][d][ytdl_hook] lua-settings/ytdl_hook.conf not found.
[ 0.012][d][console] loading mp.defaults
[ 0.014][d][commands] loading @commands.lua
[ 0.015][d][context_menu] loading mp.defaults
[ 0.015][d][console] loading @console.lua
[ 0.016][d][select] loading @select.lua
[ 0.016][d][context_menu] loading @context_menu.lua
[ 0.017][d][context_menu] reading options for context_menu
[ 0.018][d][context_menu] script-opts/context_menu.conf not found.
[ 0.018][d][stats] reading options for stats
[ 0.018][d][stats] script-opts/stats.conf not found.
[ 0.018][d][stats] lua-settings/stats.conf not found.
[ 0.018][d][select] reading options for select
[ 0.018][d][select] script-opts/select.conf not found.
[ 0.018][d][select] lua-settings/select.conf not found.
[ 0.018][d][context_menu] lua-settings/context_menu.conf not found.
[ 0.018][d][commands] reading options for commands
[ 0.018][d][commands] script-opts/commands.conf not found.
[ 0.018][d][commands] lua-settings/commands.conf not found.
[ 0.019][d][cplayer] Run command: define-section, flags=64, args=[name="input_select", contents="", flags="default"]
[ 0.019][d][cplayer] Run command: enable-section, flags=64, args=[name="input_select", flags="allow-hide-cursor+allow-vo-dragging"]
[ 0.019][d][cplayer] Run command: define-section, flags=64, args=[name="input_forced_select", contents="", flags="force"]
[ 0.019][d][cplayer] Run command: enable-section, flags=64, args=[name="input_forced_select", flags="allow-hide-cursor+allow-vo-dragging"]
[ 0.019][d][cplayer] Run command: define-section, flags=64, args=[name="input_commands", contents="", flags="default"]
[ 0.019][d][cplayer] Run command: enable-section, flags=64, args=[name="input_commands", flags="allow-hide-cursor+allow-vo-dragging"]
[ 0.019][d][cplayer] Run command: define-section, flags=64, args=[name="input_forced_commands", contents="", flags="force"]
[ 0.019][d][cplayer] Run command: enable-section, flags=64, args=[name="input_forced_commands", flags="allow-hide-cursor+allow-vo-dragging"]
[ 0.019][d][auto_profiles] Destroying client handle...
[ 0.019][d][cplayer] Run command: define-section, flags=64, args=[name="input_stats", contents="", flags="default"]
[ 0.019][d][console] reading options for console
[ 0.019][d][console] script-opts/console.conf not found.
[ 0.019][d][console] lua-settings/console.conf not found.
[ 0.019][d][cplayer] Run command: enable-section, flags=64, args=[name="input_stats", flags="allow-hide-cursor+allow-vo-dragging"]
[ 0.020][d][cplayer] Run command: define-section, flags=64, args=[name="input_forced_stats", contents="", flags="force"]
[ 0.020][d][cplayer] Run command: enable-section, flags=64, args=[name="input_forced_stats", flags="allow-hide-cursor+allow-vo-dragging"]
[ 0.020][d][cplayer] Run command: define-section, flags=64, args=[name="showhide", contents="mouse_move script-binding osc/__keybinding1\nmouse_leave script-binding osc/__keybinding2\n", flags="force"]
[ 0.021][d][cplayer] Run command: define-section, flags=64, args=[name="showhide_wc", contents="mouse_move script-binding osc/__keybinding3\nmouse_leave script-binding osc/__keybinding4\n", flags="force"]
[ 0.021][d][cplayer] Run command: enable-section, flags=64, args=[name="showhide", flags="allow-hide-cursor+allow-vo-dragging"]
[ 0.021][d][cplayer] Run command: enable-section, flags=64, args=[name="showhide_wc", flags="allow-hide-cursor+allow-vo-dragging"]
[ 0.021][d][cplayer] Run command: define-section, flags=64, args=[name="input", contents="mbtn_left script-binding osc/__keybinding5\nmbtn_mid script-binding osc/__keybinding6\nmbtn_right script-binding osc/__keybinding7\nshift+mbtn_left script-binding osc/__keybinding8\nwheel_up script-binding osc/__keybinding9\nwheel_down script-binding osc/__keybinding10\nmbtn_left_dbl ignore\nshift+mbtn_left_dbl ignore\nmbtn_right_dbl ignore\n", flags="force"]
[ 0.021][d][cplayer] Run command: enable-section, flags=64, args=[name="input", flags=""]
[ 0.021][d][cplayer] Run command: define-section, flags=64, args=[name="window-controls", contents="mbtn_left script-binding osc/__keybinding11\n", flags="force"]
[ 0.021][d][cplayer] Run command: enable-section, flags=64, args=[name="window-controls", flags=""]
[ 0.021][d][cplayer] Run command: define-section, flags=64, args=[name="input_console", contents="", flags="default"]
[ 0.021][d][cplayer] Run command: enable-section, flags=64, args=[name="input_console", flags="allow-hide-cursor+allow-vo-dragging"]
[ 0.021][d][cplayer] Run command: define-section, flags=64, args=[name="input_forced_console", contents="", flags="force"]
[ 0.021][d][cplayer] Run command: enable-section, flags=64, args=[name="input_forced_console", flags="allow-hide-cursor+allow-vo-dragging"]
[ 0.021][d][osc] reading options for osc
[ 0.021][d][osc] script-opts/osc.conf not found.
[ 0.021][d][osc] lua-settings/osc.conf not found.
[ 0.022][v][cplayer] Set property: user-data/osc/visibility="auto" -> 1
[ 0.022][d][cplayer] Run command: disable-section, flags=64, args=[name="input"]
[ 0.022][d][cplayer] Run command: disable-section, flags=64, args=[name="window-controls"]
[ 0.022][v][cplayer] Set property: user-data/osc/margins={"l":0,"r":0,"t":0,"b":0} -> 1
[ 0.022][v][cplayer] Done loading scripts.
[ 0.022][d][global] state path: 'watch_later' -> '-'
[ 0.022][v][cplayer] Running hook: auto_profiles/on_before_start_file
[ 0.022][v][cplayer] Failed sending hook command auto_profiles/on_before_start_file. Removing hook.
[ 0.022][d][global] state path: 'watch_later' -> '-'
[ 0.022][v][cplayer] Running hook: auto_profiles/on_load
[ 0.022][v][cplayer] Failed sending hook command auto_profiles/on_load. Removing hook.
[ 0.022][v][cplayer] Running hook: ytdl_hook/on_load
[ 0.023][v][cplayer] Running hook: ytdl_hook/on_load
[ 0.023][v][ytdl_hook] playlist hook
[ 0.023][v][ifo_dvdnav] Opening ./test.mp4
[ 0.023][v][cplayer] Set property: user-data/osc/margins={"l":0,"r":0,"t":0,"b":0} -> 1
[ 0.023][d][osc] osc_init
[ 0.024][v][cplayer] Set property: user-data/osc/margins={"l":0,"r":0,"t":0,"b":0} -> 1
[ 0.024][d][osd/libass] ASS library version: 0x1705000 (runtime 0x1705000)
[ 0.024][v][osd/libass] libass API version: 0x1705000
[ 0.024][v][osd/libass] libass source: commit: 0.17.5-0-g4a05d8127f525943ebf45fdc6497c9e665947f0d
[ 0.024][v][osd/libass] Shaper: FriBidi 1.0.16 (SIMPLE) HarfBuzz-ng 15.0.0 (COMPLEX)
[ 0.024][v][osd/libass] Setting up fonts...
[ 0.029][v][bdmv/bluray] Opening ./test.mp4
[ 0.029][v][file] Opening ./test.mp4
[ 0.029][d][file] resize stream to 131072 bytes, drop 0 bytes
[ 0.029][d][file] Stream opened successfully.
[ 0.029][v][demux] Trying demuxers for level=normal.
[ 0.029][d][demux] Trying demuxer: directory (force-level: normal)
[ 0.038][d][demux] Trying demuxer: disc (force-level: normal)
[ 0.038][d][demux] Trying demuxer: edl (force-level: normal)
[ 0.038][d][demux] Trying demuxer: cue (force-level: normal)
[ 0.038][d][demux] Trying demuxer: rawaudio (force-level: normal)
[ 0.038][d][demux] Trying demuxer: rawvideo (force-level: normal)
[ 0.038][d][demux] Trying demuxer: mkv (force-level: normal)
[ 0.038][d][demux] Trying demuxer: libarchive (force-level: normal)
[ 0.039][d][demux] Trying demuxer: lavf (force-level: normal)
[ 0.045][v][lavf] Found 'mov,mp4,m4a,3gp,3g2,mj2' at score=100 size=2048.
[ 0.094][v][demux] Detected file format: mov,mp4,m4a,3gp,3g2,mj2 (libavformat)
[ 0.094][v][cplayer] Opening done: ./test.mp4
[ 0.115][v][osd/libass] Using font provider fontconfig
[ 0.115][v][osd/libass] Done.
[ 0.117][v][find_files] Loading external files in ./
[ 0.117][v][cplayer] Running hook: auto_profiles/on_preloaded
[ 0.117][v][cplayer] Failed sending hook command auto_profiles/on_preloaded. Removing hook.
[ 0.117][v][cplayer] Running hook: ytdl_hook/on_preloaded
[ 0.117][d][cplayer] Run command: define-section, flags=64, args=[name="input_osc", contents="", flags="default"]
[ 0.117][v][lavf] select track 1
[ 0.117][v][lavf] refresh track 1 (audio)
[ 0.117][v][lavf] refresh seek to 0.000000
[ 0.118][v][lavf] execute seek (to 0.000000 flags 32)
[ 0.118][i][cplayer] ○ Video --vid=1 (h264 640x480 25 fps) [default]
[ 0.118][i][cplayer] ● Audio --aid=1 (aac 1ch 44100 Hz 65 kbps) [default]
[ 0.118][v][lavf] seek done
[ 0.118][v][ad] Codec list:
[ 0.118][v][ad] aac - AAC (Advanced Audio Coding)
[ 0.118][v][ad] aac_fixed (aac) - AAC (Advanced Audio Coding)
[ 0.118][v][ad] Opening decoder aac
[ 0.118][v][ad] Requesting 1 threads for decoding.
[ 0.120][v][ad] Selected decoder: aac - AAC (Advanced Audio Coding)
[ 0.120][v][af] User filter list:
[ 0.120][v][af] (empty)
[ 0.120][v][cplayer] Starting playback...
[ 0.121][d][cplayer] Run command: enable-section, flags=64, args=[name="input_osc", flags="allow-hide-cursor+allow-vo-dragging"]
[ 0.121][d][cplayer] Run command: define-section, flags=64, args=[name="input_forced_osc", contents="", flags="force"]
[ 0.121][d][cplayer] Run command: enable-section, flags=64, args=[name="input_forced_osc", flags="allow-hide-cursor+allow-vo-dragging"]
[ 0.122][v][af] [in] 44100Hz mono 1ch floatp
[ 0.122][v][af] [userspeed] 44100Hz mono 1ch floatp
[ 0.122][v][af] [userspeed] (disabled)
[ 0.122][v][af] [convert] 44100Hz mono 1ch floatp
[ 0.122][v][ao] Trying audio driver 'pipewire'
[ 0.122][v][ao/pipewire] requested format: 44100 Hz, mono channels, floatp
[ 0.122][v][ao/pipewire] Headers version: 1.6.8
[ 0.122][v][ao/pipewire] Library version: 1.6.10
[ 0.130][v][ao/pipewire] Core user: ***
[ 0.130][v][ao/pipewire] Core host: ***
[ 0.130][v][ao/pipewire] Core version: 1.6.10
[ 0.130][v][ao/pipewire] Core name: pipewire-0
[ 0.130][d][ao/pipewire] Stream state changed: old_state=unconnected state=connecting error=(null)
[ 0.132][v][ao/pipewire] using soft-buffer of 8820 samples.
[ 0.132][i][cplayer] AO: [pipewire] 44100Hz mono 1ch floatp
[ 0.132][v][cplayer] AO: Description: PipeWire audio output
[ 0.132][v][af] [convert] (disabled)
[ 0.132][v][af] [out] 44100Hz mono 1ch floatp
[ 0.132][d][ao/pipewire] Stream state changed: old_state=connecting state=paused error=(null)
[ 0.133][v][cplayer] audio ready
[ 0.133][v][cplayer] starting audio playback
[ 0.133][v][cplayer] playback restart complete @ 0.023220, audio=playing, video=eof
[ 0.134][d][osc] osc_init
[ 0.135][v][cplayer] Set property: user-data/osc/margins={"l":0,"r":0,"t":0,"b":0} -> 1
[ 0.158][d][ao/pipewire] Stream state changed: old_state=paused state=streaming error=(null)
[ 10.811][d][cplayer] Run command: quit, flags=73, args=[code="4"]
[ 10.811][v][cplayer] EOF code: 5
[ 10.811][d][ad] Uninit decoder.
[ 10.811][d][cplayer] Terminating demuxers...
[ 10.811][d][ao/pipewire] Stream state changed: old_state=streaming state=paused error=(null)
[ 10.812][d][cplayer] Done terminating demuxers.
[ 10.813][v][cplayer] finished playback, success (reason 3)
[ 10.813][v][cplayer] Running hook: ytdl_hook/on_after_end_file
[ 10.813][d][cplayer] Run command: del, flags=64, args=[name="user-data/mpv/ytdl/json-subprocess-result"]
[ 10.813][i][cplayer] Exiting... (Quit)
[ 10.814][d][cplayer] Run command: del, flags=64, args=[name="user-data/mpv/console"]
[ 10.814][d][cplayer] Run command: del, flags=64, args=[name="user-data/osc"]
[ 10.814][d][console] Destroying client handle...
[ 10.814][d][stats] Destroying client handle...
[ 10.814][d][commands] Destroying client handle...
[ 10.814][d][positioning] Destroying client handle...
[ 10.814][d][ytdl_hook] Destroying client handle...
[ 10.814][d][select] Destroying client handle...
[ 10.814][d][context_menu] Destroying client handle...
[ 10.815][d][osc] Destroying client handle...

Sample Files

No response

I carefully read all instruction and confirm that I did the following:

  • I tested and confirmed that the issue exists with the latest release version or newer.
  • I provided all required information including system and mpv version.
  • I produced the log file with the exact same set of files, parameters, and conditions used in "Reproduction Steps", with the addition of --log-file=output.txt.
  • I produced the log file while the behaviors described in "Actual Behavior" were actively observed.
  • I attached the full, untruncated log file.
  • I attached the backtrace in the case of a crash.

Activity

  1. added theissue type on Oct 29, 2026
  2. llyyr commented on Oct 29, 2026

    @llyyr
    Contributor

    Assuming your log isn't incomplete, mpv didn't receive any inputs in those logs. I don't think this is a mpv bug. mpv works perfectly fine in tty, see what kmscon is doing.

  3. mplevako commented on Oct 29, 2026

    @mplevako
    Author

    3. what kmscon is doing

    As I see it, kmscon-launch-gui temporarily releases its exclusive GPU/DRM control so that mpv can grab it. Technically there's no kmscon after that point and mpv runs "alone".
    Not sure, but as I understood mpv expects key presses to arrive through stdin and kmscon provides it and mpv works properly (as I mentioned in the Expected Behavious para.), which is irrelevant as the main problem shows in the specific pure DRM mode, the only mode possible to get any video output from mpv, where no stdin is available.

  4. CounterPillow commented on Oct 29, 2026

    @CounterPillow
    Contributor

    which is irrelevant as the main problem is that there's no stdin in the specific pure DRM mode

    Launching from a classic Linux kernel VT will absolutely make mpv's DRM video output/video context give you a stdin.

  5. mplevako commented on Oct 29, 2026

    @mplevako
    Author

    5. Launching from a classic Linux kernel VT will absolutely make mpv's DRM video output/video context give you a stdin.

    I run mpv within kmscon via kmscon-launch-gui and in this specific pure DRM mode mpv doesn't react to key events 🤷‍♂️

  6. llyyr commented on Oct 29, 2026

    @llyyr
    Contributor

    kmscon doesn't forward keyboard input to the terminal while it's backgrounded, and it's neither an X server nor a Wayland compositor. So it doesn't support any of the ways mpv can understand input.

    Adding a libinput backend to an app like mpv is silly, so this probably won't ever work without changes to kmscon or running mpv inside a compositor

    You can follow kmscon/kmscon#406 (comment)

  7. mplevako commented on Oct 29, 2026

    @mplevako
    Author

    7. Adding a libinput backend to an app like mpv is silly

    Why is it silly?

  8. llyyr commented on Oct 29, 2026

    @llyyr
    Contributor

    It adds considerable code to mpv for something that only matters for kmscon. mpv is well served by using Wayland/X protocols for input, and /dev/tty directly when running without them.

    You can simply run mpv inside a Wayland compositor.

  9. mplevako commented on Oct 29, 2026

    @mplevako
    Author

    9. You can simply run mpv inside a Wayland compositor.

    Doesn't seem like a pure DRM environment, does it?

  10. CounterPillow commented on Oct 29, 2026

    @CounterPillow
    Contributor

    Doesn't seem like a pure DRM environment, does it?

    llyyr didn't say it was. kmscon is also not a pure DRM environment; specifically, it eats your input here by backgrounding itself but not giving mpv a proper TTY.

  11. llyyr commented on Oct 29, 2026

    @llyyr
    Contributor

    10. Doesn't seem like a pure DRM environment, does it?

    no it's not, and neither is kmscon. mpv works perfectly well inside a pure DRM environment, if it doesn't feel free to report a bug.

    There's nothing much else to add to this issue, if you want things to work then it's a bug report for kmscon, or a feature request for mpv. Maybe someone will come along to add and maintain a libinput backend in mpv for this use case if they use it often enough.

  12. mplevako commented on Oct 29, 2026

    @mplevako
    Author

    9. that only matters for kmscon.

    The now default VT console in Fedora and Gnome OS?

  13. CounterPillow commented on Oct 29, 2026

    @CounterPillow
    Contributor

    Gnome OS

    Use case for using a broken VT that relies on arbitrary sleeps to not race drm master release?

  14. llyyr commented on Oct 29, 2026

    @llyyr
    Contributor

    13. The now default VT console in Fedora and Gnome OS?

    Report a bug for Fedora and Gnome OS for defaulting to a broken application? Not sure what you want us to do here.

    Most likely this is something that was overlooked by them when they made kmscon the default, or deemed not an important enough use case. In either case, you'll have to report the bug to them to get some kind of resolution to your problem, not to mpv.

  15. 13 remaining items

  16. changed the title [-]No reaction to keyboard events when using kmscon[/-] [+]No reaction to keyboard events when run barebones in pure DRM envrionments[/+] on Oct 29, 2026
  17. CounterPillow commented on Oct 29, 2026

    @CounterPillow
    Contributor

    The genuine title reflects the very issue. I don't understand which part of it is unclear? "Pure"? Substitute "raw", "genuine", "clean", "bare-metal", what not.

    Again: DRM has no concept of input.

  18. CounterPillow commented on Oct 29, 2026

    @CounterPillow
    Contributor

    It matters without kmscon too. mpv has no mouse, touchscreen, or tablet input support in drm mode and even keyboard support is limited by terminal limitations. I have libinput backend working in my local branch, mpv already provides custom input src framework so the change needed is minimal.

    @na-na-hi Are keymaps handled by libinput, or will mpv need to grow keymap handling?

    kmscon already has handling for keymaps, which means they could provide a proper terminal to applications it launches, which would sidestep this bug in kmscon's emulation of Linux VTs entirely.

  19. mplevako commented on Oct 29, 2026

    @mplevako
    Author

    30. Again: DRM has no concept of input.

    Well, then again, mpv does.

  20. CounterPillow commented on Oct 29, 2026

    @CounterPillow
    Contributor

    Well, then again, mpv does.

    Sure, feel free to use it through the terminal or --input-ipc-server, both of which work fine regardless of the VO.

  21. mplevako commented on Oct 29, 2026

    @mplevako
    Author

    31. --input-ipc-server

    Sorry, didn't pay attention to that option, but anyhow, having read about it now, I cannot understand how it can help handle keypress events. Could you please elaborate.

  22. changed the title [-]No reaction to keyboard events when run barebones in pure DRM envrionments[/-] [+]No reaction to keyboard and mouse events when run barebones in pure DRM envrionments[/+] on Oct 29, 2026
  23. CounterPillow commented on Oct 29, 2026

    @CounterPillow
    Contributor

    It's meant for providing non-terminal non-display-protocol input, such as when you're running with no terminal attached and without X11 or Wayland, using a generic IPC. Your complaint has nothing to do with DRM, and "but mpv has a concept of input" is not a rebuttal to this being unrelated to DRM. What you ran into is that kmscon does not properly emulate VTs, what you want is either for mpv to use libinput or for kmscon to emulate the terminal properly, what you're claiming is that this is mpv not supporting input in a DRM context. mpv supports input in a DRM context, just not for your specific use case, which is kmscon launching mpv without the terminal attached to stdin.

  24. mplevako commented on Oct 29, 2026

    @mplevako
    Author

    First of all I want you to finally stop fixating on kmscon. I don't know why there're issues with this IMHO easiest way of reproducing the problem, but, again, I also have nothing against using other options of putting mpv inside a raw absolutely/totaly/completeley 100% kmscon-free DRM context. I don't know, do you, for example, have any issues with tinkering with systemd and systemd-run to achieve that?
    Second, is it possible to make mpv react to mouse events so that it can be closed by clicking the 🗙?

  25. CounterPillow commented on Oct 29, 2026

    @CounterPillow
    Contributor

    I will not stop focusing on kmscon. I know you can run mpv without a terminal input in other ways. That does not change that this is fundamentally either a feature request to mpv to add a libinput backend, or a bug report to kmscon to fix its VT emulation, but it's not a bug in mpv's DRM support.

  26. kasper93 commented on Oct 29, 2026

    @kasper93
    Member

    It matters without kmscon too. mpv has no mouse, touchscreen, or tablet input support in drm mode and even keyboard support is limited by terminal limitations. I have libinput backend working in my local branch, mpv already provides custom input src framework so the change needed is minimal.

    Can you create PR with such change? Thanks.

  27. na-na-hi commented on Oct 30, 2026

    @na-na-hi
    Contributor

    @na-na-hi Are keymaps handled by libinput, or will mpv need to grow keymap handling?

    It is handled similar to wayland, using xkbcommon.

    Can you create PR with such change? Thanks.

    Done.

  28. mplevako commented on Oct 30, 2026

    @mplevako
    Author

    @Dudemanguy Whenever you have a moment, could you please remove the down-upstream mislabelling, the issue has already accumulated more than enough confusion and misinterpretation without it.

  29. avih commented on Oct 30, 2026

    @avih
    Contributor

    @mplevako please stop adding comments.

    We all undrstand the issue, it's not an mpv issue, and many of your comments don't add new info.

    So please take a breath before you comment, and if you think we could live without it, then please don't comment.

  30. changed the title [-]No reaction to keyboard and mouse events when run barebones in pure DRM envrionments[/-] [+]No reaction to keyboard, pointer, touch, and/or stylus/pen when run barebones in pure TTY-stream deficient DRM envrionments[/+] on Nov 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    down-upstreamfeatures and bugs that need to be implemented and fixed upstreamos:linux

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions