displayno 是 X11显示名称的一部分。
我已经看到了几个解释它是从 0 向上的数字的定义,但是我还没有看到任何解释是否存在最大显示数字的文档。
最高显示编号是多少?它在哪里定义?
这个问题的背景是我试图了解PyVirtualDisplay的显示编号分配算法。我还没有理解 /tmp/.X*lock 文件的作用,但看起来分配例程会选择总是增加显示数量,这表明在重复调用的某个阶段它可能会达到限制并跌倒,特别是如果它很小。
displayno 是 X11显示名称的一部分。
我已经看到了几个解释它是从 0 向上的数字的定义,但是我还没有看到任何解释是否存在最大显示数字的文档。
最高显示编号是多少?它在哪里定义?
这个问题的背景是我试图了解PyVirtualDisplay的显示编号分配算法。我还没有理解 /tmp/.X*lock 文件的作用,但看起来分配例程会选择总是增加显示数量,这表明在重复调用的某个阶段它可能会达到限制并跌倒,特别是如果它很小。
简短的回答:定义不明确。
更长的答案:这取决于您碰巧使用的流协议。在 TCP 中,它恰好被简单地添加到基本端口号 6000,这意味着服务器将无法在显示号 59535 附近的某个位置启动。在 unix 域套接字上,它只是一个附加到套接字名称下的整数/tmp/.X11-unix
(所以如果你是与您一起启动服务器-nolisten tcp
可能有几十亿左右)。在 DECnet……嗯,我不知道,但如果你发现自己处于需要关心的境地,我很抱歉。
可能为后代提供更好的答案:如果您使用的是足够新的 X 服务器,您可以使用-displayfd <n>
参数告诉服务器只需选择一个可用的显示编号,然后在该文件描述符上将其写回给您。认为这是 xserver 1.13 中的新功能,应该会在 2012 年末发布。
2147483647
这是2**31 - 1
Xephyr :2147483647
Xephyr :2147483648 # Bad display name
用蛮力发现:
for ((i=4153577566; i > 0; i -= 10000000 )); do echo $i; Xephyr :$i 2>/dev/null && break; done
for ((i=2153577566; i > 0; i -= 100000 )); do echo $i; Xephyr :$i 2>/dev/null && break; done
for ((i=2147577566; i > 0; i -= 1000 )); do echo $i; Xephyr :$i 2>/dev/null && break; done
...