如何在X11环境下限制MPV窗口仅沿Y轴移动?
限制MPV窗口仅沿Y轴垂直移动的实现方案
针对你的树莓派触摸屏后视镜场景,以下几种方案可以实现仅允许MPV窗口沿Y轴上下移动、锁定X轴位置的需求:
方案1:通过MPV自身配置禁用X轴触摸拖动
MPV支持自定义输入绑定,直接修改配置文件拦截X轴拖动动作:
- 编辑MPV的用户配置文件:
nano ~/.config/mpv/input.conf - 添加以下绑定规则:
保存退出后,重启MPV即可生效。这个方案适合单窗口播放多路流的场景,直接从输入层面限制拖动方向。# 忽略X轴方向的触摸拖动操作 touch-drag-x ignore # 保留Y轴拖动,控制窗口上下移动 touch-drag-y move window 0 ${?-10:10}
方案2:通过窗口管理器固定窗口X坐标
树莓派常用的LXDE/Openbox等轻量窗口管理器支持窗口规则配置,固定MPV窗口的X位置:
以Openbox为例:
- 编辑Openbox配置文件:
nano ~/.config/openbox/rc.xml - 在
<applications>标签内添加对应MPV窗口的规则(如果是两个MPV窗口,可分别设置name或class区分):<application name="mpv" class="mpv"> <position> <x>0</x> <!-- 替换为你需要固定的X坐标,比如第一个窗口设0,第二个设1080 --> <y>free</y> <!-- 允许Y轴自由调整 --> </position> </application> - 重启Openbox使规则生效:
openbox --restart
配置后,MPV窗口的X坐标会被锁定,只能拖动调整Y轴位置。
方案3:用脚本实时修正窗口X坐标
如果上述方案不适用,可通过脚本定时检查并强制修正MPV窗口的X位置:
- 创建脚本文件
mpv-lock-x.sh:#!/bin/bash # 设定需要固定的X坐标,多个窗口可复制逻辑分别处理 TARGET_X1=0 TARGET_X2=1080 # 获取MPV窗口ID MPV_WINDOWS=$(xdotool search --class mpv) while true; do for WIN in $MPV_WINDOWS; do # 获取当前窗口X坐标 CURRENT_X=$(xdotool getwindowgeometry --shell $WIN | grep ^X= | cut -d'=' -f2) # 获取当前窗口Y坐标 CURRENT_Y=$(xdotool getwindowgeometry --shell $WIN | grep ^Y= | cut -d'=' -f2) # 判断并修正X坐标(可根据窗口初始位置匹配对应TARGET_X) if [ "$CURRENT_X" -ne "$TARGET_X1" ] && [ "$CURRENT_X" -ne "$TARGET_X2" ]; then # 这里可根据窗口初始位置判断应该绑定哪个TARGET_X,示例默认设为TARGET_X1 xdotool windowmove $WIN $TARGET_X1 $CURRENT_Y fi done sleep 0.1 done - 给脚本添加执行权限:
chmod +x mpv-lock-x.sh - 启动MPV后,后台运行脚本:
./mpv-lock-x.sh &
脚本会实时监控MPV窗口位置,一旦X坐标偏离设定值就强制拉回,实现X轴锁定。
内容的提问来源于stack exchange,提问作者user27203839
相关产品推荐
相关产品推荐

