Articles of x11

在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) […]

有了X11,我怎么能让用户的时间“远离键盘”而忽略某些事件呢?

我正在做一个小应用程序,需要知道用户闲置了多久 – 如在不使用键盘或鼠标。 XCB和Xlib保证通过各自的屏幕保护程序扩展给我空闲时间。 这里是我在XCB空闲的时间: #include <stdlib.h> #include <xcb/xcb.h> #include <xcb/screensaver.h> static xcb_connection_t * connection; static xcb_screen_t * screen; /** * Connects to the X server (via xcb) and gets the screen */ void magic_begin () { connection = xcb_connect (NULL, NULL); screen = xcb_setup_roots_iterator (xcb_get_setup (connection)).data; } /** * Asks X for the time […]

我如何从我的Windows机器上运行安装在Linux机器上的OpenGL应用程序?

本着帮助的精神,这是一个我已经解决的问题,所以我会在这里回答这个问题。 问题 我有: 必须在Redhat或SuSE企业上安装的应用程序。 它有巨大的系统需求,需要OpenGL。 它是需要在一台机器上一起操作的一套工具的一部分。 此应用程序用于在工时方面的时间密集型任务。 我不想坐在这个应用程序的服务器机房工作。 所以,问题出现了…如何从远程Windows机器上运行此应用程序? 我将概述我的解决scheme。 随意评论替代品。 此解决scheme也适用于更简单的环境。 我的情况有点极端。

Xkb:如何将键码转换为keysym

我只是试图采取一个KeyCode和一个修饰符掩码,并将其转换为使用Xkb扩展名的KeySym。 我似乎无法弄清楚为什么这是行不通的。 它明显的修改不匹配,但我不知道为什么。 我甚至不知道我是否正确转换组。 #include <stdio.h> #include <stdlib.h> #include <X11/Xh> #include <X11/XKBlib.h> void check(XkbDescPtr keyboard_map, KeyCode keycode, unsigned int mask) { //What the hell is diff between XkbKeyGroupInfo and XkbKeyNumGroups? unsigned char info = XkbKeyGroupInfo(keyboard_map, keycode); int num_groups = XkbKeyNumGroups(keyboard_map, keycode); int key_width = XkbKeyGroupsWidth(keyboard_map, keycode); //int num_syms = XkbKeyNumSyms(keyboard_map, keycode); //Get the group unsigned […]

如何获得使用C / C ++的数字locking状态?

我已经阅读了Gdk论坛链接,其中说,获取数字locking状态API是从3.0版本开始实施的。 但是我正在使用2.4版本,因为我需要支持较低的Linux版本,所以我无法更新到3.0版本。 这里是讨论链接: http://mail.gnome.org/archives/commits-list/2010-July/msg00259.html 那么,有没有其他方法可以使用内部Linux命令获得num lock状态? 问候,iSight

在没有OpenGL的X11的QT上显示图像的最快方法是什么?

我需要在QT小部件中显示原始图像。 我在framebuffer上运行X11,所以OpenGL不可用。 图像和帧缓冲区都是相同的格式–RGB565,但如果需要的话,我可以将其更改为任何其他格式。 我不需要混合或缩放。 我只是需要显示像素。 我使用QPainter :: drawImage,但它将QImage转换为QPixmap,这种转换似乎是非常缓慢的。 也是Xrender的支持,我认为不需要额外的开销来支持Xrender中的混合,而我并不需要它 有没有更好的办法? 如果在QT中不可用,我可以使用Xlib或任何其他库或协议。 我可以修改驱动程序,X服务器或其他任何东西。