我正在设计和实现一个实验性的GUI应用程序 . 我希望允许我的用户在人体工程学上同时使用双手与应用程序进行交互 . 例如,想象一下GIMP和左手(其他)手中的第二个鼠标(轨迹球):您可以用左手导航,平移,旋转或缩放图片,同时绘制/编辑精确点,线或图形用右手同时进行 . 早在2000〜2002年,我就用两只老鼠进行了一些实验:一个在PS2(USB)接口上,另一个在RS232串行接口上 . 如今,多年以后,我正在重新审视这个古老的想法,使用现代软件和现代(USB)输入设备 .

在理想情况下,我的目标是使用X将第二个鼠标(或轨迹球)连接到GNU / Linux系统,然后能够:

(1.)继续使用主鼠标作为X默认主指针 .

(2 . )以编程方式从第二个鼠标访问/读取事件 .

(3 . )从主鼠标中分别(以可辨别的方式)从第二个鼠标中获取事件 .

(4.)能够"consume"来自第二个鼠标的事件,这样每当我的程序启动时,第二个鼠标不会影响主指针 .

(5)优选地,仅当我的节目的GUI窗口具有焦点时才应捕获第二鼠标 .

(6 . )优选地,完整的解决方案不应依赖于其他包或库,例如gpm . 但是,如果需要(任何)udev规则,这不是问题,因为最终用户无论如何都需要安装我的程序 .

(7 . )最好,解决方案不需要任何额外的权限或权限,例如将用户添加到"input"组 .

我花了6个小时在互联网上搜索提示,但遗憾的是我并没有超出一些“肮脏”的部分解决方案,有几个缺点:

(A . )将用户添加到"input"组 .

(B . )从下面的示例程序中捕获第二个鼠标中的事件 .

(C . )开放点:进一步了解如何"consume"来自第二只鼠标的事件?

(D.)应对全局捕获(不仅是焦点窗口)和其他问题?

...

#include

#include

#include

#include

int main(int argc, char **argv)

{

int ret=1; /* Program's return value; 0=success. */

int fd; /* File descriptor (handler) */

struct input_event ev;

if (argc != 2) {

printf("Usage:\n rdinpdev \n"

"Print events from an input device.\n"

);

}

else {

fd = open(argv[1], O_RDONLY);

printf("open returned %d\n",fd);

if(fd >= 0) {

ret=0;

while(1) {

read(fd, &ev, sizeof(struct input_event));

printf("value %d, type %d, code %d\n",ev.value,ev.type,ev.code);

}

}

}

return ret;

}

linux使用X11捕捉鼠标,如何在Linux下合法地以编程方式捕获第二个鼠标或轨迹球,X?...相关推荐

  1. linux mint 图标主题_如何在 Linux Mint 中更换主题

    一直以来,使用 Cinnamon 桌面环境的 Linux Mint 都是一种卓越的体验.这也是为何我喜爱 Linux Mint的主要原因之一. -- It's Foss(作者) 一直以来,使用 Cin ...

  2. linux连接多个显示器,如何在Linux Ubuntu中使用多个和外部显示器 | MOS86

    明智地使用Linux可以使您的工作效率与其他操作系统一样,但是将显示添加到您的设置中可以提供更多好处. 您可以在工作时提高工作效率,或者在玩游戏时沉浸在虚拟世界中. 最重要的是,将多个外部显示器安装到 ...

  3. linux 找到安装的软件包,如何在 Linux 中列出可用的软件包组

    原标题:如何在 Linux 中列出可用的软件包组 编译自: https://www.2daygeek.com/how-to-list-an-available-package-groups-in-li ...

  4. linux系统怎么结束程序,如何在 Linux 系统中结束进程或是中止程序

    如何在 Linux 系统中结束结束进程或是中止程序 进程出错的时候,您可能会想要中止或是中断这个进程.本文,我们将在命令行和图形界面中探索进程或是应用程序的中断,这里我们使用 gedit 作为样例程序 ...

  5. linux上查看网络限制,如何在Linux上限制网络带宽

    您是否曾经与多个设备共享网络带宽?如果您曾经处于一个应用程序占用了所有流量的位置,那么您是系统管理员还是Linux用户,您将需要发现如何控制应用程序的上载和下载速度,以确保您的带宽并不完全被单个应用程 ...

  6. linux 新用户 界面登录,如何在Linux系统登录界面加入个性化提示信息

    如何在Linux系统登录界面加入个性化提示信息 Linux字符界面看久了容易乏味,如果在登录时加点个性化显示看着也比较舒服,下面小编就给大家介绍下如何在Linux系统登录界面加入个性化提示信息,一起来 ...

  7. 检测linux服务器的使用情况,如何在Linux服务器中检查内存使用情况

    我们在排除服务器系统或应用程序速度减慢或行为不正常的问题时,首先要检查的是系统内存使用情况. 本文介绍了如何在Linux系统服务器中使用几个不同的命令来检查RAM的使用情况. 1.free命令 fre ...

  8. linux内核如何安装vim,如何在Linux 中安装和使用 PacVim?

    描述 你好,Vim用户!今天,我偶然发现了一个很酷的程序来提高 Vim 的使用技巧.Vim 是编写和编辑代码的绝佳编辑器.然而,你们中的一些人(包括我)仍在陡峭的学习曲线中挣扎.再也不用了!来看看 P ...

  9. linux查看并口设备,如何在LINUX下实现硬件的自动检测(下)

    本文是<如何在LINUX下实现硬件的自动检测>一文的下部分,作者将继续向我们讲述如何自动检测另外几种总线类型硬件设备. 5 .USB设备的自动检测 5.1 USB设备检测的一般过程 USB ...

最新文章

  1. MySQL两种表存储结构MyISAM和InnoDB的性能比较测试
  2. 不用光盘可破解电脑系统密码
  3. mysql存储引擎的方式_Mysql转换表存储引擎的三种方式
  4. ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入)
  5. 实现对数组找最大最小数
  6. 别让6种不良心理偷走你的好人缘
  7. java面试题 sql_Java面试题总结之数据库与SQL语句
  8. 服务器关闭重启后客户端socket能自动连接吗_用Python 撸一个 Web 服务器
  9. Mock生成随机数据常用的类型规则
  10. HDU 5351 MZL's Border (规律,大数)
  11. C++ Primer Plus 第二章编程练习
  12. python 大智慧自定义数据_大智慧自定义指数
  13. 基于PHP的超市库存管理系统
  14. 制作一个免费的Wi-Fi二维码原来这么简单
  15. 毕业设计指导教师评语 计算机,毕业设计指导教师评语
  16. Go标准容器之Ring
  17. stm32—火焰传感器的初步使用
  18. 基于Matlab-gui信号系统设计
  19. 学习游戏要学习编程语言吗?十大主流编程语言解析
  20. dubbo分布式服务框架(高级特性篇)

热门文章

  1. 二进制包 mysql_二进制包;mysql
  2. 配置sctp_5G站点网优参数配置指导书
  3. python大一适合学吗_大一学生是否应该去学习Python?
  4. python操作mysql的增删改查_详解使用pymysql在python中对mysql的增删改查操作(综合)...
  5. xor eax,eax
  6. java多线程 模型_一篇文章读懂Java多线程模型
  7. mysql允许用户远程连接_mysql允许用户远程连接
  8. Android11模拟定位开发,Android 11 中的位置信息更新
  9. java月份列表_java – 如何获取两个日期之间的月份和年份列表
  10. mysql 多表查询or_MySQL 多表查询