Articles of x11

将X11窗口保持在另一个窗口的顶部

我有两个x11窗口需要保持一定的堆叠顺序,即一个窗口需要保持在另一个之上。 我不在乎应用程序之外的其他窗口。 通常情况下,我会为此使用父/子,但是由于X11将子窗口剪切到父窗口,所以我必须伪造它。 我已经尝试了各种方法来保持和/或调整窗口堆栈以保持正确的顺序。 但是,WM忽略了除XRaiseWindow()之外的所有内容,这太暴力了,并导致其他窗口出现问题。 所以问题是我如何设置两个窗口之间的堆栈,或者有没有办法设置父/子不会导致父子剪辑的孩子?

Cygwin XWin服务器随机丢失连接

我正在使用cygwin ssh进入一个远程linux机器,并使用cygwin XWin服务器来显示gui应用程序。 当我第一次连接到远程机器时,会显示以下警告: Warning: untrusted X11 forwarding setup failed: xauth key data not generated Warning: No xauth data; using fake authentication data for X11 forwarding. 无论警告如何,XWIN起初似乎都很完美。 经过一段时间(通常约15分钟),它将不可避免地失去联系。 cygwin X服务器图标仍然显示在Windows任务栏中,所以我知道它仍在运行。 到目前为止,我find的唯一解决方法是注销,然后再次ssh回来。 超烦人! 请帮忙! 谢谢, -Derek

使用xinput在X11 / Linux中禁用键盘后释放所有的键?

在Linux上,当使用X11 / Xorg时,当你使用xinput来禁用他们的键盘时(例如xinput set-prop $ID "Device Enabled" 0 ),'key-up'事件不会被发送(因为你禁用了键盘)。 如果你在命令行中input这个命令,这是显而易见的,它会像你持有“进入”一样。 这是因为命令(禁用键盘)运行之前,您的手指离开回车键。 这个bug在这里讨论( https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-input-evdev/+bug/724280 )和这篇博文( http://blog.yjl.im/ 2010/12 / using-xinput-to-disable-keyboard-mouse.html )。 我正在写一个程序,需要禁用键盘,并希望避免这个问题。 是否有任何方法/命令“释放所有当前按下的键”(可以在“禁用键盘”命令后运行)? 还是有一个命令/方式来“获取所有按下的所有当前键列表”和手动/以编程方式发送“键释放”事件的方式? (这样我可以禁用键盘,看看按了什么键,然后“释放”这些键)。 这可能吗?

使用X11的Xcomposite扩展程序获取封面或不可见或最小化的窗口截图

我有下面的开始代码来获得X窗口的屏幕截图(窗口可以被覆盖,不可见或最小化)。 #include <stdlib.h> #include <stdio.h> #include <X11/Xlib.h> #include <X11/Xh> #include <X11/extensions/Xcomposite.h> #include <X11/extensions/Xrender.h> int main () { Display *display = XOpenDisplay (NULL); XID xid = 90177543; // xdotool search –name "World of Warcraft" | head -1 // Check if Composite extension is enabled int event_base_return; int error_base_return; if (XCompositeQueryExtension (display, &event_base_return, &error_base_return)) printf ("COMPOSITE IS […]

如何禁止用户在Linux上更改OS窗口焦点/types键几秒钟

我为网站编写自动化testing。 其中一个testing需要按Ctrl + S键入一些字母来保存包含CSS / JS的网页。 testing应该要求Firefox有几秒钟的窗口焦点才能input文件名并点击“保存”(当前XDoTool用于按键并单击鼠标)。 有时我在我的电脑上运行testing。 我不希望在保存页面时偶尔input内容或改变窗口焦点,所以我想禁止在鼠标点击/按键运行的几秒钟内改变焦点。 在Webdriver级别(我用来控制浏览器的工具)不可能做到这一点,所以我认为我应该在操作系统级别上做到这一点。 我可以禁止用户更改窗口焦点或在一段时间内input任何内容吗? 它可能看起来像: prohibit user from typing keys/change window focus save page allow user to type/change window focus

在Linux中只用修饰符注册热键

我正在使用这个示例在Linux X11graphics系统的程序中设置热键。 问题是我不明白如何设置热键组合,如Ctrl + Alt和Ctrl + Shift ,即没有任何键,只有修改器。 我想这样: KeyCode key = XKeysymToKeycode(display, 0); //no key code XGrabKey(display, key, ControlMask | ShiftMask, grabWin, true, GrabModeAsync, GrabModeAsync); 但它不工作。 但是,它是这样工作的(种): KeyCode key = XKeysymToKeycode(display, XK_Alt_L); //Alt key XGrabKey(display, key, ControlMask, grabWin, true, GrabModeAsync, GrabModeAsync); 我不喜欢这个解决scheme,因为: 逻辑上错误 只有在按下Ctrl + Alt时才会触发,而不是Alt + Ctrl ,即按下顺序非常重要 它用Ctrl和Alt键在窗口中阻止所有其他组合。 我究竟做错了什么?

Docker容器中的X11转发GUI应用程序

我目前正在尝试在Docker容器中运行一些GUI应用程序。 我一直在github上由jessie frazelle尝试。 不过,我可以build立图像(或从docker集线器)并运行它们没有任何可见的错误,但窗户不显示(我不能看到应用程序)。 我在Ubuntu 16.04上运行Docker版本1.13.1 该图像创build于: FROM debian:stretch MAINTAINER Jessie Frazelle <jess@linux.com> RUN apt-get update && apt-get install -y \ libreoffice \ –no-install-recommends \ && rm -rf /var/lib/apt/lists/* ENTRYPOINT [ "libreoffice" ] 我使用的运行命令如下: docker run -d \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v /etc/localtime:/etc/localtime \ -e DISPLAY=unix$DISPLAY -v $HOME/Documents:/root/Documents \ -e GDK_SCALE \ -e GDK_DPI_SCALE \ […]

System.exit在Linux上不是线程安全的吗?

我刚刚从Oracle JDK 1.6切换到打开JDK 1.7.0_03,在退出时我遇到了相当显着的死锁问题: java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.lang.Thread.join(Thread.java:1258) – locked <0x8608dda0> (a sun.awt.X11.XToolkit$1$1) at java.lang.Thread.join(Thread.java:1332) at java.lang.ApplicationShutdownHooks.runHooks(ApplicationShutdownHooks.java:106) at java.lang.ApplicationShutdownHooks$1.run(ApplicationShutdownHooks.java:46) at java.lang.Shutdown.runHooks(Shutdown.java:123) at java.lang.Shutdown.sequence(Shutdown.java:167) at java.lang.Shutdown.exit(Shutdown.java:212) – locked <0x8603df28> (a java.lang.Class for java.lang.Shutdown) at java.lang.Runtime.exit(Runtime.java:107) at java.lang.System.exit(System.java:960) 看起来你必须从AWT事件队列调用System.exit。 这是真的吗? Sun文档Runtime.exit中没有关于线程要求的文档 我遇到了其他令人惊讶的情况,只有在Linux上才需要获取AWT树锁,但是这个需要花钱。 这是一个错误,还是我错过了文档中的东西?

X11中“Invalidate Rect”/“WM_PAINT”的等效

我将一些代码从Windows移植到XLib。 在Windows代码中,我可以通过调用InvalidateRect强制重绘,然后处理相应的WM_PAINT消息。 但是,我很难find如何在X11 / XLib中做到这一点。 我看到有一个Expose消息,但不知道这是否是一回事。 如果重要的话,我需要这样做来强制窗口以一定的帧速率渲染一个基于OpenGL的程序。

帮助:达到的最大客户数 – 分段错误

我想模拟许多关键的新闻事件。 我使用XTestFakeKeyEventfind了一个解决scheme,但是当我模拟超过210次时,我的程序引发了“达到最大客户端数量”的分段错误。 我不知道如何解决这个问题。 我的代码在这里: #include <X11/Xlib.h> #include <X11/keysym.h> #include <X11/extensions/XTest.h> #include <stdio.h> #define PRESS_UP 0 #define PRESS_DOWN 1 #define PRESS_LEFT 2 #define PRESS_RIGHT 3 #define PRESS_ENTER 4 #define PRESS_ESC 5 #define PRESS_HOME 6 Display *display; unsigned int keycode; int press(int key){ display = XOpenDisplay(NULL); if(key == PRESS_UP) keycode = XKeysymToKeycode(display, XK_Up); else if(key == PRESS_DOWN) […]