Найти - Пользователи
Полная версия: Xlib.error.DisplayConnectionError: Can't connect to display ":0": Maximum number of clients reached
Начало » Python для новичков » Xlib.error.DisplayConnectionError: Can't connect to display ":0": Maximum number of clients reached
1
Eskemouse
def get_pixel_colour(i_x, i_y):
    o_x_root = Xlib.display.Display().screen().root
    o_x_image = o_x_root.get_image(i_x, i_y, 1, 1, Xlib.X.ZPixmap, 0xffffffff)
    o_pil_image_rgb = PIL.Image.fromstring(
        "RGB", (1, 1), o_x_image.data, "raw", "BGRX")
    lf_colour = PIL.ImageStat.Stat(o_pil_image_rgb).mean
    return rgb_to_hex(tuple(map(int, lf_colour)))

Вот мой код для определения цвета пикселя.
После использования несколько тысяч раз вылетает с такой ошибкой:

Xlib.error.DisplayConnectionError: Can't connect to display “:0”: Maximum number of clients reached


Помогите решить проблему. Заранее спасибо.
Shaman
Наверное нужно как-то так:
disp = Xlib.display.Display()
# work
disp.Close()
Eskemouse
o_x_root = Xlib.display.Display().screen().root

Один раз, вне цикла.
Shaman
Если на то пошло, get_image тоже стоит вынести из цикла получения пикселей (если операции не разнесены во времени) и PIL там лишний.
Eskemouse
А можете предложить свой вариант, без PILa?
И ещё, если запустить на одном tty, а после перейти на другой, то возвращается 000000
Shaman
Eskemouse
А можете предложить свой вариант, без PILa?
Конечно
o_x_image = o_x_root.get_image(i_x, i_y, 1, 1, Xlib.X.ZPixmap, 0xffffffff)
return rgb_to_hex(tuple(reversed(map(ord, o_x_image.data[:3]))))
Если я правильно интерпретировал формат. Если нет, нужно побаловаться реверсом и срезом.
Eskemouse
Shaman
Если я правильно интерпретировал формат
Да, спасибо, работает)

А с этим не подскажете что делать?
Eskemouse
если запустить на одном tty, а после перейти на другой, то возвращается 000000
Shaman
Eskemouse
если запустить на одном tty, а после перейти на другой, то возвращается 000000
Не понял, что именно вы там творите. Если щелкать консолями во время исполнения
import Xlib.display, logging
def get_pixel_colour(i_x, i_y):
    o_x_root = Xlib.display.Display().screen().root
    o_x_image = o_x_root.get_image(i_x, i_y, 1, 1, Xlib.X.ZPixmap, 0xffffffff)
    return tuple(reversed(map(ord, o_x_image.data[:3])))
while True:
    logging.info(get_pixel_colour(0, 0))
То другого ожидать и не приходится.
Eskemouse
Shaman
Не понял, что именно вы там творите
Я плохо объясняю, но в общем так…
Перехожу на tty2, поднимаю иксы, запускаю скрипт.
Далее возвращаюсь на tty1, и тогда функция возвращает 000000
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB