Articles of x11

使用dlopen()dynamic加载共享对象

我正在做一个普通的X11应用程序。 默认情况下,我的应用只需要libX11.so和标准的gcc C和math库。 该应用程序可以扩展Xfixes,Xrender和ALSA声音系统的function。 但是,这些(Xfixes,Xrender和ALSA)function是可选的。 为了实现这种行为,我使用运行时加载,即libXfixes,libXrender和libasound应该是dlopen()。 因此,应用程序可以运行在没有这样的图书馆。 现在我的问题: What library names should I use when calling dlopen()? 我观察到,这些从发行版到发行版有所不同。 例如,在openSUSE 11上,它们被命名为: libXfixes.so libXrender.so libasound.so 然而,在Ubuntu上,这个名字有一个版本号,如下所示: libXfixes.so.3 libXrender.so.1 libasound.so.2 所以试图打开“libXfixes.so”将在Ubuntu上失败,虽然显然在那里。 它只是附有一个版本号。 那么我的应用程序应该如何处理呢? 我应该让我的应用程序扫描/ usr / lib /第一个手动查看我们有哪些库,然后select一个合适的? 还是有没有人有一个更好的主意? 多谢你们, 安迪

从Java程序打开浏览器窗口

题 我有一个用Java编写的应用程序。 它被devise为独立运行在一个Linux机器上。 我正试图产生一个新的Firefox窗口。 但是, Firefox永远不会打开。 它总是有一个shell退出代码1.我可以用gnome-terminal运行这个相同的代码,并打开罚款。 背景 所以,这里是它的初始化过程: 启动X“Xorg:1 -br -terminate -dpms -quiet vt7” 启动窗口pipe理器“metacity –display =:1 – replace” configuration资源“xrdb -merge / etc / X11 / Xresources” 成为守护进程,并从控制terminal断开 一旦程序运行,用户可以点击一个button,产生一个Firefox窗口。 这是我的代码来做到这一点。 记住X正在显示中:1。 码 public boolean openBrowser() { try { Process oProc = Runtime.getRuntime().exec( "/usr/bin/firefox –display=:1" ); int bExit = oProc.waitFor(); // This is always 1 […]

将应用embedded到窗口中

FvwmButtons(fvwm窗口pipe理器的一个模块)具有Swallow函数,将应用程序的窗口embedded到面板中。 我必须用Motif和Xlib来做这样的事情。 我想embedded一个Xclock到我的应用程序。 我想我必须改变embedded式应用程序的窗口ID。 我怎样才能做到这一点?

如何在linux上制作透明窗口

我想在Linux上使用启animation面使应用程序成为应用程序。 我想用X11和glx(OpenGL应用程序)。 我find了一种方法来删除窗口周围的边框,但我找不到如何使其透明。 我怎样才能做到这一点?

将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键在窗口中阻止所有其他组合。 我究竟做错了什么?