Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 12, 2013 20:34:29

Eskemouse
Зарегистрирован: 2013-06-12
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

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

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


Помогите решить проблему. Заранее спасибо.

Офлайн

#2 Июнь 12, 2013 20:48:59

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

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

Наверное нужно как-то так:

disp = Xlib.display.Display()
# work
disp.Close()

Офлайн

#3 Июнь 17, 2013 16:59:15

Eskemouse
Зарегистрирован: 2013-06-12
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

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

o_x_root = Xlib.display.Display().screen().root

Один раз, вне цикла.

Офлайн

#4 Июнь 17, 2013 17:24:08

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

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

Если на то пошло, get_image тоже стоит вынести из цикла получения пикселей (если операции не разнесены во времени) и PIL там лишний.

Отредактировано Shaman (Июнь 17, 2013 18:25:00)

Офлайн

#5 Июнь 22, 2013 15:07:04

Eskemouse
Зарегистрирован: 2013-06-12
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

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

А можете предложить свой вариант, без PILa?
И ещё, если запустить на одном tty, а после перейти на другой, то возвращается 000000

Офлайн

#6 Июнь 22, 2013 15:36:30

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

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

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]))))
Если я правильно интерпретировал формат. Если нет, нужно побаловаться реверсом и срезом.

Офлайн

#7 Июнь 22, 2013 20:50:40

Eskemouse
Зарегистрирован: 2013-06-12
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Shaman
Если я правильно интерпретировал формат
Да, спасибо, работает)

А с этим не подскажете что делать?
Eskemouse
если запустить на одном tty, а после перейти на другой, то возвращается 000000

Офлайн

#8 Июнь 23, 2013 09:16:20

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

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

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))
То другого ожидать и не приходится.

Офлайн

#9 Июнь 23, 2013 12:27:30

Eskemouse
Зарегистрирован: 2013-06-12
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Shaman
Не понял, что именно вы там творите
Я плохо объясняю, но в общем так…
Перехожу на tty2, поднимаю иксы, запускаю скрипт.
Далее возвращаюсь на tty1, и тогда функция возвращает 000000

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version