You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下读写ec_sys文件引发键盘按键重复问题求助

关于MSI笔记本Cooler Boost快捷切换程序的问题

背景

  • 测试isw工具时发现,可通过# isw -b on/off命令开启或关闭Cooler Boost;通过strace追踪得知其原理:向/sys/kernel/debug/ec/ec0/io的0x98偏移处写入0(关闭)或0x80(开启)。
  • 为实现快捷切换,编写了带setuid权限的C程序,代码如下:
#include <unistd.h>
#include <stdio.h>

int main() {
    int err = setuid(0);
    if(err) {
        perror("setuid");
        return 2;
    }

    FILE *ec = fopen("/sys/kernel/debug/ec/ec0/io", "rb+");
    if(!ec) {
        perror("fopen");
        return 1;
    }

    fseek(ec, 0x98, SEEK_SET);
    int state = fgetc(ec);
    fseek(ec, 0x98, SEEK_SET);
    if (state == 0)
        state = 0x80;
    else
        state = 0;

    fputc(state, ec);
    fclose(ec);
    return 0;
}

问题现象

  • 终端直接执行程序时,会输出大量换行;
  • 将程序绑定为Super+F1快捷键触发时,键盘完全失灵(仅鼠标可用),且风扇未提速;
  • 改为在图形终端中通过快捷键执行,发现大量终端窗口被重复打开并执行该程序。

临时解决方法

在程序开头添加sleep(1)语句后,换行和重复执行的问题得到解决。

求助内容

  1. 除了添加sleep(1)外,是否有更优的解决方案?
  2. 该问题属于系统bug还是硬件问题?(已查看Linux内核ec_sys.c源码未发现异常,使用环境:Arch Linux、Gnome Wayland、MSI笔记本)

内容的提问来源于stack exchange,提问作者Yarm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:12:23