Articles of xorg

X获取并发送按键C ++

我想为Linux做一个文本replace程序。 即我input类似.alog的东西,它被replace为/ usr / local / apache / logs /。 我知道我可以用alaises做到这一点,但是我经常远程login那些没有这个问题的机器。 我也有兴趣做这个学习的目的。 我在网上看到一些关于抓取的信息,并在X中发送了一个窗口的按键,但在工作区中找不到所有窗口的信息。 任何build议如何做到这一点将不胜感激。

我怎样才能运行我的Java应用程序的虚拟屏幕?

在Linux中,我们有像桌面1,2,3,4这样的虚拟屏幕。大多数情况下我们使用桌面1(屏幕1和一个显示器)。 现在,我的问题是我怎么能告诉我的Java应用程序启动桌面2(屏幕2,与一个监视器) 默认情况下,当我运行java -cp /var/tmp/SystemX.jar run.X时,它将在桌面1,屏幕1中启动。哪一个不是我的情况。 试过:以下但没有帮助的原因,它运行双监视器场景。 不是我所期待的。 screen = Toolkit.getDefaultToolkit().getScreenSize(); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] screenDevices = ge.getScreenDevices(); for (int i = 0; i < screenDevices.length; i++) { System.out.println(screenDevices[i].getIDstring()); int screenWidth = 1024; int screenHeight = 764; if (screenDevices[i].getDisplayMode()!=null) { DisplayMode dm = screenDevices[i].getDisplayMode(); screenWidth = dm.getWidth(); screenHeight = dm.getHeight(); } System.out.println("[myResolution]: " + […]

触发X窗口的resize事件

所以我有一个X窗口(属于另一个进程),我想为该窗口触发一个resize事件,最好不实际调整它的大小。 我的第一个办法是重新调整窗口两次,第二次回到原来的大小,但我失败了。 问题是,有问题的窗口显示全屏,显然调用XResizeWindow或XMoveResizeWindow这些什么都不做(这是有道理的某种方式)。 如果窗口不处于全屏模式,它工作正常。 由于这只是为了快速testing反正我开始想知道是否有可能在X服务器中伪造/注入该窗口的resize事件。 对于MS Windows来说,看起来很容易,但是在Google上search的时候发现了很多例子,但是对于X来说,我似乎运气不好。 背景(因为人们可能会问无论如何;)):我正在全屏启动一个VMware Player实例,并在某些情况下启动后,Windows客人不会根据主机更改它的分辨率(但主要是,谢谢到客户机上安装的VMware Tools)。 虚拟机在连接不同大小屏幕的多台机器上使用,因此我无法预先configuration图像以获得正确的分辨率。 目前用户被告知退出并重新进入全屏,如果分辨率是错误的,但这是相当不方便的。 所以我的想法是简单地告诉VMplayer它在启动后只是resize,但也许有更好的方法…

X11:窗口移动时得到通知

我的应用程序需要知道窗口何时被移动(我需要知道我的应用程序的窗口相对于屏幕的确切位置(根窗口/绝对位置) – 例如xcb_translate_coordinates返回的xcb_translate_coordinates ,dst_window设置为屏幕的根窗口)。 问题是我需要接收一个事件,如果我的窗口被用户移动。 我已经将这个XCB_EVENT_MASK_STRUCTURE_NOTIFY添加到了事件掩码中,正如我们在这里所build议的那样,我的应用程序只是在窗口pipe理器的框架的相对位置发生改变时才获取事件(这反过来,X服务器不会向我的应用程序发送任何事件如果窗口被用户移动,因为它不改变窗口pipe理器框架的相对位置)。 有关其他信息,这里是窗口创build代码: uint32_t events = XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_KEY_PRESS; xcb_create_window(conn, XCB_COPY_FROM_PARENT, main_window, scr->root, 0, 0, width, height, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, scr->root_visual, XCB_CW_EVENT_MASK , &events); xcb_map_window(conn, main_window); 我已经在桌面会话和Xephyr中使用Xfwm4,Openbox和metacity,在合成模式和非合成模式下都尝试了这种方法,所有结果都一样。 什么是解决scheme,以便我可以通知窗口移动事件? 我不想启用override_redirect ,因为我也需要我的应用程序由窗口pipe理器来pipe理。

为Linux写锁屏?

我一直在寻找一个好的锁屏来使用我的XFCE系统,但似乎有任何细长的锁屏。 我目前正在使用slock ,但它只是一个绝对没有任何界面的空白屏幕。 我正在用Python编写一个锁屏。 我查看了slock的源代码,好像我必须以某种方式与Xorg进行交互。 有人知道写锁屏吗?

重新加载XINITRC而不重新启动Xorg

我有一些简单的脚本,允许我在运行时更改某些版本的应用程序在我的.bashrc文件中的编码。 例如,假设我有“猫”应用程序。 有两个版本,一个在/testing/工作,另一个在/testing/testing版。 如果我运行bash命令“changer.sh”,它将/ bin / cat中的符号链接改为指向/ test / beta / cat或/ test / working / cat。 在terminal和Konsole或Xterm内工作时,这工作正常。 我的.xinitrc中也有一行,这样X应用程序也可以看到这个环境variables,但是有一个问题:当Xorg启动时,Xorg / Xfree86似乎取消了引用这个符号链接,所以在整个持续时间在我的Xsession中,“cat”被parsing为/ test / working / cat,如果稍后发生更改,则不会重新评估符号链接。 似乎现在唯一的解决方法是每次更改此符号链接时closures并重新启动Xorg。 是否有可能迫使Xorg重新加载/重新parsing我的.xinitrc,而不必每次重新启动它? 谢谢!

Java – 如何设置我的应用程序总是在主屏幕上运行,但不是在第二个屏幕上?

我有两个屏幕,主要笔记本电脑和第二台显示器。 每当我启动这个应用程序,它运行在我的第二个屏幕,而不是主屏幕上。 我如何告诉应用程序只在左边的主屏幕上运行。 例: screen = Toolkit.getDefaultToolkit().getScreenSize(); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] screenDevices = ge.getScreenDevices(); for (int i = 0; i < screenDevices.length; i++) { System.out.println(screenDevices[i].getIDstring()); DisplayMode dm = screenDevices[i].getDisplayMode(); int screenWidth = dm.getWidth(); int screenHeight = dm.getHeight(); System.out.println("[myResolution]: " + screenWidth + " " + screenHeight); screen.width = screenWidth; screen.height = screenHeight; } Output: […]

在python中获取正在运行的显示服务器的名称

我怎样才能获得当前Linux会话中使用的显示服务器的Python名称? 我想知道用户是否使用Xorg或Wayland。

我如何创build一个在所有其他窗口之上的X窗口/客户端,而不是在WM控制之下,并且没有input? (覆盖,OSD)

我想编写应用程序(或使用现有的应用程序,这将更加方便),其行为像一个硬件屏幕OSD(在屏幕上显示),只有没有input。 也就是说:一个graphics输出(例如像Qt或者Gtk这样的GUI工具包)被放置在一个甚至全屏的窗口上,比如Firefox F11模式或全屏模式的video播放器。 也包括鼠标光标的“上方”,因此在技术上和graphics上,鼠标光标将移动到该小部件的下面。 我不知道使用SDL或OpenGL的真正的全屏应用程序,但这不是要求。 如果你知道这一点,请把它包括在你的答案中。 真实世界的应用程序是只读覆盖像一个小networking摄像头窗口,电视台像徽标或预制的注释。 因此,总而言之,这是用于现场演示,stream媒体和录制截屏video和教程,最less的后期处理。 我自己的黑客,不成功的实验表明,至less从WM控件中删除这个窗口(我通过select一个GTKpopup对话框而不是一个真正的主窗口),可以让你以绝对坐标进行定位,并且会忽略虚拟桌面和工作区,这是很好的,所以你可以切换这些和覆盖/ HUD将留在原地。 当然这不能在软件中使用与硬件屏幕相同的Z值(顶部/底部窗口)来完成。 所以在技术上我说的是高于所有其他窗口,但低于屏幕保护程序或锁屏层。 +1互联网链接到文档,并提供正确的关键字。 +2互联网的工作代码示例,语言,gui工具包等无所谓。

在X11 / Xlib.h中缺lessXGetPixel()?

我正在编写一个使用XGetPixel()方法的程序。 但是,使用它时,我得到一个错误说:“错误:XGetPixel没有在这个范围内声明” 我的代码如下: #include <X11/Xlib.h> #include <X11/Xh> #include <unistd.h> #include <iostream> using namespace std; int main() { // Open a display. Display *d = XOpenDisplay(NULL); // Get the root of the display Window root = DefaultRootWindow(d); // Map the root window XMapWindow(d, root); // Get width and height of the display int windowHeight = XDisplayHeight […]