所有基于Swing/NetBeans的Java GUI应用程序似乎都具有相同的WM_CLASS
值:
WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "java-lang-Thread"
Run Code Online (Sandbox Code Playgroud)
可以通过发出xprop
命令并指向窗口来查看此参数.定制它的实际目的是让类似Mac的扩展坞(例如AWN(以及可能是Ubuntu的Unity))区分应用程序窗口并将它们分组到应用程序的固定启动器图标下.为此工作StartupWMClass
参数将在.application
文件中相应地设置~/.local/share/applications
或/usr/share/applications
.毋庸置疑,如果多个应用程序使用相同的字符串,AWN(和类似物)会感到困惑WM_CLASS
.
在 Linux 中禁用屏幕保护程序的更好的跨 DE 方法是什么?我在这里找到了一些东西,但它仅适用于 gnome-screensaver。我想知道是否有任何方法可以模拟击键或某些 X.Org API 来禁用屏幕保护程序激活。
我搜索了互联网,找到了只设置一个属性字段的示例:
xprop -id "$windowid" -f _NET_WM_STATE 32a -set _NET_WM_STATE _NET_WM_STATE_ABOVE
Run Code Online (Sandbox Code Playgroud)
但是如何设置多个字段?我试过了:
xprop -id "$windowid" -f _NET_WM_STATE 32a -set _NET_WM_STATE '_NET_WM_STATE_ABOVE, _NET_WM_STATE_SKIP_TASKBAR'
Run Code Online (Sandbox Code Playgroud)
和
xprop -id "$windowid" -f _NET_WM_STATE 32aa -set _NET_WM_STATE _NET_WM_STATE_ABOVE,_NET_WM_STATE_SKIP_TASKBAR
Run Code Online (Sandbox Code Playgroud)
和许多其他变种没有运气.可能吗 ?:)
我为xprop编写了一个修补程序来解决这个问题,并且它有效,但不知道它是否正确.
感谢@MichałGórny.
(xprop.c,v 1.6)
--- xprop.c 2012-07-31 11:24:01.178117974 +0400
+++ xprop.mod 2012-07-31 11:23:19.434784430 +0400
@@ -1487,11 +1487,20 @@
break;
}
case 'a': {
- static Atom avalue;
- avalue = Parse_Atom(value, False);
- type = XA_ATOM;
- data = (unsigned char *) &avalue;
- nelements = …
Run Code Online (Sandbox Code Playgroud) 运行自定义键盘和触摸板修改,我想使用以下命令激活 2 手指滚动:
xinput --set-prop id "Synaptics Two-Finger Scrolling" 1 1
Run Code Online (Sandbox Code Playgroud)
其中 id 是使用找到的设备 ID
xinput --list
Run Code Online (Sandbox Code Playgroud)
重启后谁改变的id。最好使用批处理脚本来自动查找 ID 并设置首选项。
我一直在 Pi4、Ubuntu 22.04 服务器和 Gnome 桌面上运行 Electron 应用程序,没有出现任何问题。由于它无论如何都作为一个单独的应用程序作为信息亭运行,因此我一直在尝试消除 Gnome 并仅从 CLI 启动(安装了 X)。但是,我得到:
ERROR:ozone_platform_x11.cc(247) Missing X server or $DISPLAY
The platform failed to initialize. Exiting.
Run Code Online (Sandbox Code Playgroud)
我读过有关设置“DISPLAY=$HOST_IP:10.0”的信息,但是我不清楚在哪里设置,或者是否适用于这种情况。我对这部分还很陌生,所以任何帮助将不胜感激!
我正在使用xlib.
我有一个XImage结构,其中包含来自XGetImage()调用的信息.是否有一种流行的方法可以从XImage获得更有意义的东西..即PNG?
我看过libpng,但几乎每个人都听说这是一个驯服的野兽.这仍然是推荐的路径吗?
我想编写像硬件屏幕 OSD(屏幕显示)一样运行的应用程序(或使用现有的应用程序,这会更方便),只是不需要输入。
也就是说:图形输出(例如来自 Qt 或 Gtk 等 GUI 工具包)被放置在甚至位于全屏窗口(如 Firefox F11 模式或全屏模式下的视频播放器)上方的层上。这也包括鼠标光标“上方”,因此从技术上和图形上讲,鼠标光标将移动到该小部件下方。我不知道 SDL 或 OpenGL 的真正全屏应用程序,但这不是要求。如果您也知道这一点,请将其包含在您的答案中。
现实世界的应用程序是只读覆盖层,例如一个小网络摄像头窗口、一个电视台(例如徽标)或预制注释。总而言之,这一切都是为了现场演示、流媒体和录制截屏视频和教程,并进行最少的后期处理。
我自己的黑客攻击,不成功的实验至少表明,从 WM 控件中删除这个窗口(我通过选择 GTK 弹出对话框而不是真正的主窗口来做到这一点)可以让您定位在绝对坐标中,并且它会忽略诸如虚拟桌面和工作区,这很好,因此您可以在这些工作区之间切换,并且覆盖/HUD 将保持在原位。
当然,这不能在与硬件屏幕具有相同 Z 值(顶部/底部窗口)的软件中完成。因此,从技术上讲,我所说的是在所有其他窗口之上,但在屏幕保护程序或锁屏层之下。
+1 互联网,用于链接到文档并提供正确的关键字。
+2 互联网用于工作代码示例、语言、GUI 工具包等并不重要。
我有一个带 GPIO 显示的 Raspberry Pi。我目前将它设置为 /dev/fb1 中的帧缓冲设备。有没有办法让它成为 X 窗口的默认或主要显示?我最终试图为它绘制图形,我最初计划使用 DirectFB 和 SDL,但 DirectFB 是 pi 的 alpha。我也尝试过使用 SDL1.2,因为它支持帧缓冲,但我不知道如何让 SDL 选择要绘制的帧缓冲设备而不使用 DirectFB。
我考虑使用 SDL 将我的简单 GUI 的每一帧准备为原始图像,并使用 mmap 将其 blit 到 /dev/fb1 而不是使用 SDL 的内置绘图函数,但我觉得这是实现我的目标的一种糟糕方式。
我认为如果我可以让 xorg 使用我的帧缓冲设备作为主监视器,我就不必担心做任何特殊的事情来让 SDL 绘制我的图像文件。但我不太确定 xorg 是如何工作的,以及这是否可能。
任何人的任何见解或帮助都会有很大帮助!一个星期以来,我一直在解决这个问题,寻找不同的可能性。
每次我从 SSH 登录时,我都会得到:
只允许控制台用户运行 X 服务器
如果我制作一个新tmux
窗格,我也会得到这个,我可以通过放置:
test -z ${TMUX} && startx
在我的 .zprofile
我假设我收到消息是因为我运行startx
. startx
如果我从 ssh 登录,如何使它不运行?
是否可以让 virt-viewer 以 2 个显示器启动?
背景:我们有一个基于 Linux 的零售系统,通常在具有多个显示器的终端上运行。基本上,当 X 启动时,我们会检测连接了多少个显示器,并据此配置我们的系统(即,我们有一个始终显示的主显示器,以及一个可选的辅助显示器,在具有 2 个屏幕的系统上显示)。为了进行测试,我们在虚拟机(基于 libvirt SPICE/QEMU)中使用 SPICE-VDAGENT 运行该系统,允许我们使用 virt-viewer 打开 2 个显示器,从而模拟与真实终端相同的设置。
问题是 virt-viewer 似乎无法启动 2 个显示器,一旦 X 启动,我总是必须使用“视图”->“显示器”菜单打开第二个显示器。这会导致问题,因为此时已经进行了屏幕检测和配置(并且由于仅打开了 1 个显示器,因此系统仅检测到 1 个屏幕)。
到目前为止,我发现的唯一解决方法是打开第二个显示器,然后重新启动 X 强制重新配置,但是我确实需要从一开始就打开第二个显示器,这样我们就可以获得双屏幕系统,而无需任何手动干预。
这可以做到吗?一个问题是第二个显示器只能在 SPICE-VDAGENT 启动后打开,并且只有 X 启动后才能启动。