我正在处理一个小应用程序,我需要找到给定其主窗口或子窗口的X11窗口ID的进程的PID.我看到了使用这种转换的示例_NET_WM_PID
,但我无法弄清楚如何在不使用它的情况下执行此操作.不使用的原因_NET_WM_PID
是它没有在所有可用的窗口管理器中实现,我的应用程序需要处理它们中的任何一个(或至少在大多数窗口管理器上).有人可以帮助我,并就如何解决这个问题给我一些建议/指示?谢谢!
我正在尝试创建一个深度为32的X11窗口,以便我可以使用ARGB颜色.这是我做的:
XVisualInfo vinfo; int depth = 32; XMatchVisualInfo(dpy, XDefaultScreen(dpy), depth, TrueColor, &vinfo); XCreateWindow(dpy, XDefaultRootWindow(dpy), 0, 0, 150, 100, 0, depth, InputOutput, vinfo.visual, 0, NULL);
这是发生的事情:
X Error of failed request: BadMatch (invalid parameter attributes) Major opcode of failed request: 1 (X_CreateWindow) Serial number of failed request: 7 Current serial number in output stream: 7
有关BadMatch错误原因的任何指示?
我希望拥有一个多用户系统(基于Linux),只使用一个带有多个屏幕的X11会话和一对鼠标和键盘.因此,两个(或更多)人可以使用相同的计算机共享不仅相同的硬件而且共享相同的"屏幕"(当然,它将被分成两个物理屏幕,但您可以将窗口移动到您的伙伴身上. ..).共享窗口不仅可以更方便地"显示"您的合作伙伴您所做的事情 - 如果用户A开始使用复杂的应用程序处理某些事情(断言保存文件并打开它们不方便另一个会话)将应用程序的窗口移动到用户B应该就像在自己的屏幕中移动窗口一样简单.这就是我称之为"无缝"多用户会话的原因.
我在这篇文章中读到了X11"多座位",它没有我想要的功能.它为每个用户使用会话而不是一个会话.
我发现XI2又名Xinput2,它提供了多指针支持.这允许具有由两只小鼠控制的两个单独的鼠标指针.我读到你可以为两只鼠标分配两个键盘,提供独立的焦点和文本输入.但我想知道剪贴板("真实"和"鼠标中键"剪贴板)是否也被单独处理......我发现只有少数关于XI2多指针功能但没有"现场报告"的信息.
另一个完全不同的想法是在计算机上有两个独立的X11会话,但在两个会话之间使用X11-forward共享窗口.但是:据我所知,你不能共享一个转发X11的窗口,以便用户A运行一个应用程序,当它运行时,将窗口发送给用户B.据我所知,只有用户B可以在硬件上运行一个应用程序用户A并在其自己的X11会话上显示窗口.那也不是我想要的......或者我错了,可以在应用程序启动后通过X11转发转发窗口吗?
编辑:我刚刚发现XPRA类似于X11转发,但允许从/向X11会话分离和附加正在运行的应用程序.我现在试一试.
完成任何其他想法?
我的问题是这样的:首先,我使用Mac上的Terminal.app通过ssh -Y登录远程服务器.然后键入以打开该远程服务器上安装的emacs
emacs
Run Code Online (Sandbox Code Playgroud)
因为我在使用ssh时添加选项-Y,所以emacs在Mac上安装的XQuartz中打开.
此时,问题出现了:选项键不被视为Meta,只有ESC键被视为Meta.但我想使用选项键作为Meta.
我该如何解决?
我知道可以和GLX一起使用Xlib和OpenGL(我自己在C中完成了).
问题是,我如何在python中执行此操作?该OpenGL
模块具有GLX功能[ 文档 ],但它似乎使用C类型,我不知道(也没有,似乎是其他人)如何使用PyOpenGL的xlib类型.
我也试过ctypes
直接使用和加载库,但在尝试使用Xlib头文件中定义的C宏时遇到(明显的)问题,比如DefaultRootWindow
.
我错过了一些明显的东西,比如PyOpenGL有自己的xlib
实现,或者如果没有一些(编译的)模块编写,这是不可能的?
我正在使用Docker解释器在PyCharm中开发一个项目,但是在做大多数"交互式"事情时我遇到了问题.例如,
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [4, 5, 6])
Run Code Online (Sandbox Code Playgroud)
给
RuntimeError: Invalid DISPLAY variable
Run Code Online (Sandbox Code Playgroud)
我可以绕过这个
import matplotlib
matplotlib.use('agg')
Run Code Online (Sandbox Code Playgroud)
摆脱错误,但是当我做plt.show()时没有产生情节.我也得到了与线程[pycharm远程python控制台]相同的错误:导入熊猫时尝试调试导入pandas时出现"无法连接到X服务器"错误,但我无法通过SSH连接到我的docker容器,因此解决方案在那里提出不起作用.我已经看到了将"-e DISPLAY = $ DISPLAY"传递给"docker run"命令的解决方案,但我不相信PyCharm有任何使用Docker解释器指定命令行参数的功能.有没有办法设置某种永久的,通用的X11转发(如果这确实是根本原因),以便这些图将适当地传递到我本地机器上的DISPLAY?更一般地说,有没有人在PyCharm中成功使用matplotlib和Docker解释器?
我已经开始学习Python,到目前为止我的设置一直在关注 - 在Win10 64位本地机器上安装Python 3.5,PyCharm是一个很棒的IDE.一切正常,matplotlib图表和其他视觉输出显示精细,调试工作等.
现在,我遇到了一些仅适用于Linux的库.我在Digital Ocean上安装了Ubuntu 16.4 64bit VPS,安装了Python 3.5.在PyCharm中,我已经设置了与远程主机的SFTP连接.代码运行工作,调试工作,但是,我无法将显示输出(matplotlib绘图,...)带到本地(Win10)机器.由于我对Linux GUI环境(X11?)一点都不熟悉,谷歌搜索后我有以下问题:
1)是否应该在远程Linux机器上安装任何东西?(例如x11 client/server/smth?)
2)是否应该在本地Win机器上安装任何东西?(例如Xming?)
3)是否应该在远程Linx机器上配置任何东西?(例如X11转发)
4)是否应在本地Win机器PyCharm上配置任何内容?
5)Putty中有X11转发设置,有些人建议使用这些设置,但我不确定,如果Putty会话与PyCharm并行运行并且可以避免.
非常感谢!
PS - 我已经在远程机器上安装了Jupyter Notebook(和最新的Jupyter Lab)并且它工作得非常好,但我仍然更喜欢PyCharm作为主要IDE,具有更好的代码完成,调试器和其他额外补贴.
我想检测由窗口管理器管理的特定应用程序的实例数量.目前,我有这个:
#!/bin/bash
# wmctrl required
pids=$(pidof $1)
IFS=' ' read -a pid_arr <<< "$pids"
matches=0
for pid in "${pid_arr[@]}"
do
matching_lines=$(wmctrl -l -p | egrep -c "^.+\b.+\b$pid\b")
matches=$((matches + $matching_lines))
done
echo $matches
Run Code Online (Sandbox Code Playgroud)
假设我有三次打开firefox并且firefox
作为参数传递,如果没有打开"子窗口"(例如首选项窗口),该函数将只返回正确的数字.否则,该函数也将计算这些窗口.
我想获得没有"子窗口"的窗口数量.
PS:做了一些改变.要计算没有对话窗口的窗口数,这是我目前的解决方案:
#!/bin/bash
pids=$(pidof $1)
IFS=' ' read -r -a pid_arr <<< "$pids"
matches=0
for pid in "${pid_arr[@]}"
do
ids=$(wmctrl -l -p | awk '$3=='$pid'{printf $1" "}')
IFS=' ' read -r -a id_arr <<< "$ids"
for id in "${id_arr[@]}"
do
if ! xprop -id …
Run Code Online (Sandbox Code Playgroud)