问题标签 [xlib]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2394 浏览

x11 - X11:如何将重力/方向旋转到 90 度

我需要知道是否可以将所有基于 X 的应用程序的方向旋转到 90 度。无需修改其来源。我猜 X11 应该有一些配置选项。那么如何做到这一点呢?

0 投票
1 回答
4567 浏览

x11 - 触摸屏相对坐标

我在触摸屏设备上使用 xrandr -o left|right|inverse|normal 旋转了 X 环境。除了触摸,一切正常。在屏幕上移动手指时,它取手指的绝对坐标,如果旋转是反向的,则向相反方向移动光标。因此,如果我实际上向上滑动,它会向下滑动。那么有没有办法配置触摸屏输入来读取相对坐标而不是绝对坐标。触摸屏驱动程序是evdev。

问候,列文

0 投票
1 回答
175 浏览

c - 如何使用 Motif 编译 '97 C 代码?

您好我正在尝试编译大约 30 个 1997 年编写的 C 源代码。基于所需的头文件(例如 XmAll.h 和 Xlib.h)以及“Widget”语法的使用,我发现这些源代码依赖于 Motif 编程工具包,所以看起来它们应该在 Linux 或 Unix 系统中编译。

我对 X Windows 编程和 Motif 编程没有任何经验,但我必须编译它们。我真的尝试在 Mac OSX 或 Windows 中编译它们,但它当然没有用。

我是否必须先将 Linux 安装为虚拟操作系统并在其中安装 Open Motif 才能编译它们?能不能给点别的建议?

太感谢了!

0 投票
2 回答
679 浏览

x11 - 如何将 X11 应用程序附加到 Dbus

如何让 X11 应用程序监听 DBus 信号。应该启动监听 Dbus 信号的 gmainloop,并启动 X11 应用程序 XEvent 循环。那么有没有一种优雅的方法来做到这一点?还是我必须在另一个线程中运行 gmainloop。

问候,列文

0 投票
1 回答
4005 浏览

c++ - 如何让 Xlib 代码在 Eclipse 中为 C++ ubuntu 工作

我有一些带有以下 Xlib 头文件的代码,但不知道该怎么做才能使它工作......我找不到这些头文件。

抱歉,这是新手。好的,现在我可以在我的 Eclipse IDE 中查看 foldrrs 中的标题。我收到以下错误。源代码没有问题,因为朋友已经从终端运行它,我想从 Eclipse IDE 中运行它:

在函数main': /home/abbas/workspace/test3/Debug/../src/test3.cpp:51: undefined reference toXOpenDisplay'

以及许多其他相同类型但功能不同的错误。

collect2: ld 返回 1 退出状态 make: *** [test3] 错误 1

Plzz hellpp!!

0 投票
1 回答
403 浏览

c - X11:如何让应用居于首位

情况 我正在使用基于 X11 的应用程序的火柴盒键盘。当任何应用程序处于全屏模式时,火柴盒键盘不可见,因为全屏应用程序位于顶部。那么有没有办法在全屏应用程序上启动基于 X11 的应用程序?

0 投票
0 回答
1026 浏览

pointers - 一些键盘/鼠标事件不能被捕获-xlib 编程

我有这个程序的问题。它列出了系统上正在运行的当前窗口及其窗口 ID。

结果是,对于我输入的特定窗口 ID,我得到了一个奇怪的结果:对于像 firefox 或 gedit 这样的应用程序,只有运动通知事件有效,其他事件都无效。

对于我的终端(bash),一切正常:按键,按键释放,鼠标通知,鼠标释放,......

为什么会这样?

0 投票
1 回答
2844 浏览

linux - Linux下的drop/rewrite/generate键盘事件

我想在 Linux 下挂钩、拦截和生成键盘(make/break)事件,然后再将它们传递给任何应用程序。更准确地说,我想检测关键事件流中的模式,并能够根据检测到的模式将事件丢弃/插入到流中。

我已经看到了一些关于 SO 的相关问题,但是:

  • 要么他们只处理如何获取关键事件(键盘记录器等),而不是如何操纵它们的传播(他们只听,但不拦截/生成)。
  • 或者他们在 X 中使用被动/主动抓取(阅读下面的更多内容)。

小型 DSL

我在下面解释了这个问题,但为了使它更紧凑和易于理解,首先是一个小的 DSL 定义。

  • A_:用于制作(按下)键A
  • A^: 用于中断(释放)键 A
  • A^->[C_,C^,U_,U^]A^发送 C 的通断组合,然后 U 进一步向下处理链(最后到应用程序)。如果没有,->则没有发送任何内容(但可能会修改内部状态以检测后续事件)。
  • $X: 执行任意动作。这可以是发送一些可配置的键事件序列(可能类似于C-x C-semacs),或者执行一个函数。如果我只能发送关键事件,那就足够了,因为我可以根据哪个应用程序处于活动状态,在窗口管理器中进一步处理这些事件。

问题描述

好的,使用这个符号,这里是我想要检测的模式以及我想要在处理链中传递的事件。

  1. A_, A^->[A_,A^]: 解释 见上文,请注意发送发生在A^.
  2. A_, B_, A^->[A_,A^], B^->[B_,B^]:与1基本相同,但重叠事件不会改变处理流程。
  3. A_, B_, B^->[$X], A^:如果一个键 (B) 完全通/断,而另一个键 (A) 被按住,则执行 X(见上文),并且 A 的断点被丢弃。

(原则上它是一个简单的状态机,通过键事件实现,可以生成(多个)键事件作为输出)。

补充说明

  • 该解决方案必须以打字速度工作。
  • 修改后的关键事件流的使用者在 Linux 上的 X 下运行(控制台、浏览器、编辑器等)。
  • 只有键盘事件影响处理(没有鼠标等)
  • 匹配可以发生在键符(更容易)或键码(更难)上。对于后者,我只需要读取映射即可将代码转换为键符。
  • 如果可能的话,我更喜欢一个既适用于 USB 键盘又适用于虚拟机内部的解决方案(如果在驱动程序层工作可能会出现问题,其他层应该没问题)。
  • 我对实现语言非常开放。

可能的解决方案和问题

所以基本问题是如何实现这一点。

我已经在窗口管理器中使用被动抓取 ( XGrabKey) 和XSendEvent. 不幸的是,被动抓取在这种情况下不起作用,因为它们B^在上面的第二种模式中没有正确捕获。原因是转换后的抓取结束A^而不是继续B^。如果仍然持有但仅在约 1 秒后,新的抓取将转换为捕获 B。否则B^将向应用程序发送一个plain。这可以用 来验证xev

我可以将我的实现转换为使用主动抓取XGrabKeyboard(X 文档将主动抓取称为具有侵入性并且专为短期使用而设计。如果有人有这方面的经验并且长期主动抓取没有重大缺点,那么我会认为这是一个解决方案。

我愿意看看除了窗口管理器(作为 X 客户端运行)之外的其他关键事件处理层。只要我能用它们解决上述问题,键盘驱动程序或映射都是可能的。这也意味着解决方案不必是单独的应用程序。让驱动程序或内核模块为我执行此操作非常好。请注意,尽管我从未做过任何内核或驱动程序编程,所以我会很感激一些好的资源。

感谢您的任何指点!

0 投票
1 回答
1613 浏览

keyboard - 从 XGrabKeyboard 中排除一些键

考虑一个应用程序,它希望在获得焦点时抓住键盘,以便捕获所有窗口管理器命令(Alt+F4 等)进行处理。现在,这有一个缺点,即用户在抓住键盘时无法通过键盘切换到另一个应用程序或虚拟桌面。我想要一个用户定义的组合键白名单(例如,用于切换虚拟桌面的组合键),这些组合键被排除在抓取之外。

我可以想到两种可能的方法。当列入白名单的关键事件到达时,要么

  1. 不知何故告诉 X 像往常一样继续处理它。这听起来像是一种更自然的方式,但我找不到这样做的方法,或者
  2. 松开键盘并手动将事件重新发送到窗口管理器进行处理,但是我不知道将它发送到哪里(根窗口?)或者这是否可行。

任何人都可以填写这些空白吗?还有其他建议吗?

如果没有办法从抓取中排除按键,我想我将不得不接受一个“退出键”,它在按下时会松开键盘。但是,用户必须同时按下它,然后按下窗口管理器命令,这不是很好。

0 投票
4 回答
10178 浏览

x11 - Xlib 中的窗口位置

如何使用普通的 ol' xlib(或全新的 XCB)获得相对于根窗口(即整个屏幕)的顶级窗口位置?