From d5b0ad4ed6aec920c5131f85a6d85cd76f44291b Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Fri, 4 Apr 2014 15:10:58 +0200 Subject: multi-display support can apply once, then it segfaults MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- examples/comprehensive | 63 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 5 deletions(-) (limited to 'examples') diff --git a/examples/comprehensive b/examples/comprehensive index 96e3d96..41b0137 100644 --- a/examples/comprehensive +++ b/examples/comprehensive @@ -89,11 +89,64 @@ download_command = None # download_command = lambda url : ['wget', url, '-O', '-'] -# Method for applying colour curves. -apply_curves = randr -#apply_curves = vidmode -if ttymode: - apply_curves = drm +# Method for applying colour curves in X. +apply_curves_x = randr +#apply_curves_x = vidmode + +# Method for applying colour curves in TTY. +apply_curves_tty_ = drm + +# X's RandR and DRM which is used in TTY, does not +# necessarily give the CRTC:s the same indices. +# Specifically, RandR reorders them so that the +# primary monitor have CRTC 0. Fill in this table +# so that the indices give by DRM are mapped to +# those given by RandR. In this example, 0 is mapped +# to 1 and 1 is mapped to 0, this is how it should +# be if your primary monitor is given index 1 by +# DRM and you have two monitors. +tty_to_x_crtc_mapping = {0 : 1, 1 : 0} + +def apply_curves_tty(*crtcs, screen = 0, display = None): + ''' + Wrapping for `apply_curves_tty_` that remaps the CRTC:s + indices, to match those in RandR. + + @param crtcs:*int The CRT controllers to use, all are used if none are specified + @param screen:int The graphics card to which the monitors belong, + named `screen` for compatibility with `randr` and `vidmode` + @param display:str? Dummy parameter for compatibility with `randr` and `vidmode` + ''' + mapping = tty_to_x_crtc_mapping + crtcs_ = [(mapping[c] if c in mapping else c) for c in crtcs] + apply_curves_tty_(*crtcs_, screen = screen, display = display) + +def apply_curves(*crtcs, screen = 0): + ''' + Applies colour curves + + This wrapper is used to allow multi-display and multi-server support + + @param crtcs:*int The CRT controllers to use, all are used if none are specified + @param screen:int The screen to which the monitors belong + ''' + # Single display and single server, variant: + #(apply_curves_tty if ttymode apply_curves_x)(*crtcs, screen = screen) + + # Variant for TTY and all X display: + #apply_curves_tty(*crtcs, screen = screen) + #for display_socket in os.listdir('/tmp/.X11-unix'): + # if display_socket.startswith('X'): + # try: + # display = ':%i' % int(display_socket[1:]) + # apply_curves_x(*crtcs, screen = screen, display = display) + # except: + # pass + + # Variant for TTY and selected X displays: + apply_curves_tty(*crtcs, screen = screen) + for display in [None, ':1']: # Current and :1 + apply_curves_x(*crtcs, screen = screen, display = display) # Keep uncomment to use solar position. -- cgit v1.2.3-70-g09d2