linux

如何用Compton实现窗口抖动效果

小樊
53
2025-10-18 04:08:53
栏目: 编程语言

一、前置准备:安装Compton
在开始前,需确保系统已安装Compton(轻量级X11复合管理器)。通过包管理器安装(以Debian/Ubuntu为例):

sudo apt update && sudo apt install compton

安装完成后,Compton可手动启动或添加至系统启动项。

二、配置Compton基础参数(可选但建议)
虽然Compton本身无专门“窗口抖动”参数,但可通过调整动画相关设置优化抖动效果的流畅度和强度:

  1. 创建配置文件:在用户目录下新建Compton配置文件夹及文件:
    mkdir -p ~/.config/compton && nano ~/.config/compton/compton.conf
    
  2. 添加动画参数:在配置文件中加入以下内容(调整数值可改变抖动表现):
    # 动画持续时间(秒):数值越小,抖动越快
    animation-duration = 0.3;  
    # 动画步长:控制抖动的细腻程度,建议0.05-0.1
    animation-step = 0.1;  
    
    保存并退出(Ctrl+X→Y→Enter)。

三、实现窗口抖动的核心方法
Compton无内置“窗口抖动”开关,需通过外部脚本+Compton组合实现。以下是两种常用方案:

方案1:使用xdotool编写抖动脚本(精准控制)

xdotool可模拟键盘/鼠标输入及窗口操作,适合需要自定义抖动轨迹的场景:

  1. 安装xdotool
    sudo apt install xdotool x11-utils  # 需xwininfo获取窗口几何信息
    
  2. 编写抖动脚本(如~/scripts/window_jitter.sh):
    #!/bin/bash
    # 获取当前活动窗口ID
    WINDOW_ID=$(xdotool getactivewindow)
    # 获取窗口当前位置(x,y坐标)
    POS=$(xdotool getwindowgeometry --shell $WINDOW_ID | grep -E 'POSITION_X|POSITION_Y' | cut -d'=' -f2)
    read -r X Y <<< "$POS"
    # 抖动参数:偏移量(像素)、循环次数(抖动频率)
    OFFSET=15
    ITERATIONS=10
    # 执行抖动(左右随机偏移)
    for ((i=0; i<ITERATIONS; i++)); do
        # 生成随机偏移量(-OFFSET到+OFFSET之间)
        DX=$((RANDOM % (OFFSET * 2) - OFFSET))
        DY=$((RANDOM % (OFFSET * 2) - OFFSET))
        # 移动窗口
        xdotool windowmove $WINDOW_ID $((X + DX)) $((Y + DY))
        # 短暂延迟(控制抖动速度)
        usleep 100000  # 100毫秒
    done
    # 恢复窗口原始位置
    xdotool windowmove $WINDOW_ID $X $Y
    
  3. 赋予执行权限
    chmod +x ~/scripts/window_jitter.sh
    
  4. 运行脚本
    终端执行~/scripts/window_jitter.sh,或绑定至快捷键(如GNOME的“设置→键盘→快捷键”)。

方案2:通过Compton配置+脚本组合(批量抖动)

若需抖动所有窗口(而非单个活动窗口),可使用以下脚本遍历窗口:

#!/bin/bash
# 获取所有窗口ID(Compton管理的窗口)
WINDOWS=$(compton --query | grep -oP '0x[0-9a-f]+')
# 抖动参数
OFFSET=10
ITERATIONS=8
DELAY=0.05  # 每次抖动的间隔(秒)
for WINDOW in $WINDOWS; do
    # 获取窗口位置
    GEOM=$(xwininfo -id $WINDOW | grep Geometry)
    X=$(echo $GEOM | awk '{print $2}' | cut -d'+' -f1)
    Y=$(echo $GEOM | awk '{print $2}' | cut -d'+' -f2)
    for ((i=0; i<ITERATIONS; i++)); do
        DX=$((RANDOM % (OFFSET * 2) - OFFSET))
        DY=$((RANDOM % (OFFSET * 2) - OFFSET))
        xdotool windowmove $WINDOW $((X + DX)) $((Y + DY))
        sleep $DELAY
    done
    xdotool windowmove $WINDOW $X $Y
done

运行方式同方案1。

四、自动启动Compton(可选)
若需每次登录系统自动启用Compton,可将启动命令添加至桌面环境的“启动应用程序”中:

注意事项

0
看了该问题的人还看了