标签: xlib

一些好的Xlib编程指南在哪里?

我现在对Xlib编程有点困惑.几周前我开始使用dwm(一个轻量级的窗口管理器),我想收集一些Xlib编程书籍或在线资源来定制dwm.

然而,谷歌搜索网络后,我没有看到很多新的文章谈论Xlib?亚马逊X窗口系统的最新编程指南是在1994年!?没有Xlib的新文章,因为旧书已经足够,或者因为有一些我不知道的新技术?或者,也许我没有正确的关键字来搜索网络.如果是这样的话,请有人指点我到正确的地方吗?

xlib

6
推荐指数
1
解决办法
2566
查看次数

最小化全屏Xlib OpenGL窗口

我目前正在尝试从我的全屏Xlib OpenGL窗口启用alt-tabbing,但是遇到了一些困难.我试过XUnmapWindow(..),哪种方法有效,但分辨率没有重置(除非我应该手动执行此操作?)并且我的Xlib窗口不会显示为最小化窗口(即我无法将alt-tab返回窗口,即使应用程序似乎仍然在后台运行).

我尝试的下一件事是将窗口从全屏模式更改为窗口模式(即在窗口模式下重新创建窗口),但显然,我宁愿不必这样做.

我正在听FocusOutFocusIn事件,FocusOut似乎在我的alt-tab时调用,但我不知道如何让我的应用程序正确地最小化.如果在FocusOut调用事件时我的代码中没有做任何事情,我的应用程序不会做任何事情(即我不能最小化窗口).

任何帮助,将不胜感激!

编辑:不幸的是,我无法让X Windows正确地最小化全屏窗口.因此,为了解决这个问题,我决定destroy()使用全屏窗口,然后create()在窗口模式下使用新窗口.似乎运作良好.

opengl window-managers fullscreen minimize xlib

6
推荐指数
1
解决办法
2949
查看次数

XLib,XTestFakeKeyEvent迟到了

我尝试使用XLib和XTestFakeKeyEvent将密钥发送到应用程序,并且它工作正常,使用以下代码:

XSetInputFocus(disp, list[selectWindow],RevertToPointerRoot,CurrentTime);
for(i=0;i<hello.size();i++){
    tamper[0] = hello[i];
    KeySym key = XStringToKeysym(tamper);
    XTestFakeKeyEvent(disp,XKeysymToKeycode(disp, key),True, CurrentTime );
    XTestFakeKeyEvent(disp,XKeysymToKeycode(disp, key),False, CurrentTime );
}
Run Code Online (Sandbox Code Playgroud)

当选择列表[selectWindow]是我发送数据和篡改一个char [2](以字符从打招呼[I]为char*的函数转换窗口.这个代码写的Hello wariable的内容到选定的窗口,但是,我试图发送Return键,

XSetInputFocus(disp, list[selectWindow],RevertToPointerRoot,CurrentTime);
XTestFakeKeyEvent(disp,XKeysymToKeycode(disp, XK_Return),True, CurrentTime );
XTestFakeKeyEvent(disp,XKeysymToKeycode(disp, XK_Return),False, CurrentTime );
Run Code Online (Sandbox Code Playgroud)

所以我再次选择窗口,并发送XK_Return关键应用,但它不工作,我想这是因为与Xlib的"滞后"的,因为如果我把一个wait(2)的结束'for'循环,它工作正常,但我不想在每次发送邮件的2秒内等待.

我不知道如何解决这个问题.

谢谢.

c++ xlib

6
推荐指数
1
解决办法
1440
查看次数

用Xlib捕获鼠标

我想编写一个简单的Xlib程序来改变鼠标行为(举个例子,反转垂直运动).我在捕获事件时遇到问题.

我想要代码

  • 捕获控制器位置的变化(我向上移动鼠标MotionEvent)
  • 计算新光标位置(new_x -= difference_x)
  • 设置新的光标位置(向下移动指针XWarpPointer,防止事件生成)

下面的代码应该在每次移动鼠标时捕获一个动作事件,但只有当指针从一个窗口移动到另一个窗口时它才会生成事件...如何捕获所有的移动事件?

#include "X11/Xlib.h"
#include "stdio.h"

int main(int argc, char *argv[])
{
    Display *display;
    Window root_window;
    XEvent event;

    display = XOpenDisplay(0);
    root_window = XRootWindow(display, 0);
    XSelectInput(display, root_window, PointerMotionMask );

    while(1) {
        XNextEvent( display, &event );
        switch( event.type ) {
            case MotionNotify:
                printf("x %d y %d\n", event.xmotion.x, event.xmotion.y );
                break;
        }
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有关:

X11:我如何真正抓住鼠标指针?

c xlib

6
推荐指数
1
解决办法
6120
查看次数

使用Xlib在python中获取窗口位置和大小

我需要找到窗口位置和大小,但我无法弄清楚如何.例如,如果我尝试:

id.get_geometry()    # "id" is Xlib.display.Window
Run Code Online (Sandbox Code Playgroud)

我得到这样的东西:

data = {'height': 2540,
'width': 1440,
'depth': 24,
'y': 0, 'x': 0,
'border_width': 0
'root': <Xlib.display.Window 0x0000026a>
'sequence_number': 63}
Run Code Online (Sandbox Code Playgroud)

我需要找到窗口位置和大小,所以我的问题是:"y","x"和"border_width"总是0; 更糟糕的是,"高度"和"宽度"在没有窗框的情况下返回.

在这种情况下,在我的X屏幕上(其尺寸为4400x2560)我预期x = 1280,y = 0,宽度= 1440,高度= 2560.

换句话说,我正在寻找python等价物:

#!/bin/bash
id=$1
wmiface framePosition $id
wmiface frameSize $id
Run Code Online (Sandbox Code Playgroud)

如果您认为Xlib不是我想要的,请随意在python中提供非Xlib解决方案,如果它可以将window id作为参数(如上面的bash脚本).在python代码中使用bash脚本输出的明显解决方法感觉不对.

python xlib

6
推荐指数
1
解决办法
4046
查看次数

Xlib:关闭窗口总是会导致致命的IO错误?

我不确定为什么会发生这种情况,但是我在C++中使用Xlib创建的任何窗口都会在我尝试关闭时使用X按钮向终端输出错误.我可以通过编程方式关闭它而没有错误,它只是执行它的X按钮.

错误如下:

XIO:  fatal IO error 11 (Resource temporarily unavailable) on X server ":0"
after 483 requests (483 known processed) with 0 events remaining.
Run Code Online (Sandbox Code Playgroud)

请求的数量每次都不同,但总有0个事件剩余.为什么会这样?原因似乎不是我的代码,因为它无论如何都会执行此操作并且不向队列发送任何关闭事件.我试过拦截Atom WM_WINDOW_DELETE,当我关闭窗口时它不会运行预期的代码.

编辑:添加了事件循环代码.

while(XPending(display)) {
    XNextEvent(display, &event);

    pthread_mutex_unlock(&mutex);

    if(event.type == Expose) {
        XWindowAttributes getWindowAttributes;

        pthread_mutex_lock(&mutex);

        XGetWindowAttributes(display, window, &getWindowAttributes);

        if(state.currentState == STATE_NORMAL) {
            state.normX = getWindowAttributes.x;
            state.normY = getWindowAttributes.y;
            state.normWidth = getWindowAttributes.width;
            state.normHeight = getWindowAttributes.height;
        }

        pthread_mutex_unlock(&mutex);

        glViewport(0, 0, getWindowAttributes.width, getWindowAttributes.height);
    } else if(event.type == KeyPress) {
        return false;
    } else if(event.type == ClientMessage) {
        std::cout<<"X Button …
Run Code Online (Sandbox Code Playgroud)

c c++ linux xlib

6
推荐指数
1
解决办法
3512
查看次数

在64位Debian environement上编译32位qt源

我想在我的Debian 64位环境中构建32位应用程序.

所以,我正在尝试编译Qt源以获得32位库.

我正在尝试使用以下configure命令:

./configure -platform linux-g++-32
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到如下错误:

Basic XLib functionality test failed!
 You might need to modify the include and library search paths by editing
Run Code Online (Sandbox Code Playgroud)

但是当我做以下事情时:

./configure -platform linux-g++-64
Run Code Online (Sandbox Code Playgroud)

它工作正常.

任何猜测?

c++ debian qt cross-compiling xlib

6
推荐指数
1
解决办法
1266
查看次数

X中的XYPixmap,ZPixmap,XImage,XShmImage和Bitmap有什么区别?

我知道的唯一事实XImage是存储在客户端,pixmaps存储在服务器端.这么简单吗?

那么什么是XYZ Pixmaps为什么X需要这么多类型的图像格式?

为什么没有XYZ Images

什么是上下文中的Bitmap Xlib以及为什么有一个XCreateBitmapFromData返回Pixmap句柄的函数?(或指针?或结构?)

bitmap xlib xorg

6
推荐指数
1
解决办法
2649
查看次数

使用X11在Linux上获取scancode而不是keycode

我正在尝试收听键盘输入(使用X11事件循环)并获取扫描码.这些扫描码应该指代密钥的物理位置,而不是它所键入的字符.问题是,我所能得到的只是KeySyms和KeyCodes,它们针对不同的语言进行了不同的映射(例如QWERTY vs QWERTZ).

我目前的解决方案是阅读"/ usr/share/X11/xkb/keycodes/evdev"文件.它包含密钥位置到密钥代码的映射.使用这个我可以简单地将任何键码转换回扫描码.我的猜测是,这不是一种稳定的做事方式.我根本不太了解Linux.这就是为什么我认为在这里问这可能是一个好主意.

假设大多数用户的机器正在使用这些evdev映射是否安全?如果没有,我还能在哪里找到实际使用的关键映射?或者是否有更好的解决方案?

linux x11 input xlib scancodes

6
推荐指数
1
解决办法
1537
查看次数

如何在Ubuntu VPS GNOME环境中为TightVNC正确配置xstartup文件

我想使用带有VNC的GNOME环境来访问我的Ubuntu 16.10 VPS(Contabo),但是我仍然遇到一些我目前无法解决的问题。要安装和配置软件,我运行了以下命令:

sudo apt-get install ubuntu-gnome-desktop
sudo apt-get install tightvncserver xtightvncviewer tightvnc-java
sudo locale-gen de_DE.UTF-8
sudo apt-get install xfonts-75dpi
sudo apt-get install xfonts-100dpi
sudo apt-get install gnome-panel
sudo apt-get install metacity
sudo apt-get install light-themes
touch ~/.Xresources
vncpasswd
Run Code Online (Sandbox Code Playgroud)

文件〜/ .vnc / xstartup最初包含以下几行:

#!/bin/sh
xrdb $HOME/.Xresources 
xsetroot -solid grey
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work 
export XKL_XMODMAP_DISABLE=1 
/etc/X11/Xsession
Run Code Online (Sandbox Code Playgroud)

当我启动VNC服务器时,vncserver -geometry 1920x1200根据〜/ .vnc中的日志文件,一切正常

17/02/17 11:47:48 …
Run Code Online (Sandbox Code Playgroud)

x11 gnome xlib vnc-server ubuntu-16.04

6
推荐指数
1
解决办法
2万
查看次数