niri里怎么实现自动切换显示器

我用大模型写了shell脚本调用wlr-randr,能实现自动熄屏内置 但是断开外置,内置的死活不能点亮 // 监听显示器变化事件,并自动执行切换脚本 spawn-at-startup "sh" "-c" "niri msg --json event-stream | while read -r e...
niri里怎么实现自动切换显示器
niri里怎么实现自动切换显示器

我用大模型写了shell脚本调用wlr-randr,能实现自动熄屏内置
但是断开外置,内置的死活不能点亮

// 监听显示器变化事件,并自动执行切换脚本
spawn-at-startup "sh" "-c" "niri msg --json event-stream | while read -r event; do echo \"$event\" | grep -q 'OutputsChanged' && ~/auto-switch-screen.sh; done"

// 2. 新增:开机/登录后延迟 5 秒自动执行一次脚本(负责初始状态的切换)
spawn-at-startup "sh" "-c" "sleep 5 && ~/auto-switch-screen.sh"
#!/bin/bash

# 将所有输出(包括报错)追加写入到日志文件中
exec >> ~/screen-switch.log 2>&1
echo "=== $(date) 脚本被触发 ==="

# 第一次防抖:等待系统初步刷新显示器连接状态
sleep 2

# 提取纯显示器代号
connected_outputs=$(wlr-randr | grep "DP-3 ")
echo "当前识别到的连接显示器: $connected_outputs"

# 检查外接显示器 DP-3
if echo "$connected_outputs" | grep -q "DP-3"; then
    echo "判断结果:检测到外接显示器 DP-3,准备切换..."
    # 第二次防抖:避开热插拔瞬间的底层冲突
    sleep 1
    wlr-randr --output eDP-1 --off
    wlr-randr --output DP-3 --on
else
    echo "判断结果:未检测到 DP-3,准备恢复内置屏 eDP-1..."
    # 第二次防抖
    sleep 1
    # 💡 核心改动:先强制关闭内置屏,再重新打开(重置状态)
    wlr-randr --output eDP-1 --off
    sleep 0.5
    wlr-randr --output eDP-1 --on
    # 确保外置屏彻底关闭
    wlr-randr --output DP-3 --off
fi
echo "命令执行完毕。"

1 个帖子 - 1 位参与者

阅读完整话题

来源: LinuxDo 最新话题查看原文