Hi all, 

In my Python application running on Raspberry Pi under Raspbian I use 
Pygame to display some software-generated images via framebuffer. I don’t 
need any input from mouse, keyboard or any other devices, all I need is a 
convenient way of using framebuffer.

 

I initialize Pygame in the following way:

 
class FramebufferStaticImage(object):



    black = (0, 0, 0)

    white = (255, 255, 255)

 

    _ENV_VAR_DISPLAY = "DISPLAY"

    _instance = None

    

    def __init__(self, log):

        "Ininitializes a new pygame screen using the framebuffer"

        # Based on "Python GUI in Linux frame buffer"

        # http://www.karoltomala.com/blog/?p=679

        if FramebufferStaticImage._instance != None:

            raise Exception("No more than 1 instance of 
FramebufferStaticImage is allowed!")

        FramebufferStaticImage._instance = self

        self._log = log

        self._log.info("[fb_static_image] Init: entered")

        self._screen = None

 

        # Try ensure using framebuffer and not X11 display even if it exists

        if self._ENV_VAR_DISPLAY in os.environ:

            del os.environ[self._ENV_VAR_DISPLAY]

        

        os.putenv('SDL_FBDEV', '/dev/fb0')

        os.putenv('SDL_VIDEODRIVER', 'fbcon')

        os.environ['SDL_NOMOUSE'] = '1'

####        os.putenv('SDL_NOMOUSE', '1')

        self._log.debug("Current environment is: {env}", env = os.environ)

        import pygame

        pygame.display.init()

 

        self._width = pygame.display.Info().current_w

        self._height = pygame.display.Info().current_h

        self._log.info("[fb_static_image] Framebuffer size: {width} x 
{height}",

                       width = self._width, height = self._height)

        self._screen = pygame.display.set_mode(

            (self._width, self._height), pygame.FULLSCREEN)

        # Clear the screen to start

        self._screen.fill(self.black)

        # Initialise font support

        pygame.font.init()

        # Render the screen

        pygame.display.update()

        self._log.info("[fb_static_image] Init: leaving")


 

Problem #1: I have mouse pointer at the top left corner of Pygame-drawn 
images. I want mouse pointer to be hidden.

I know that I can disable mouse pointer using pygame.mouse.set_visible, but 
here comes 

Problem #2: I have to run my application with sudo in order for pygame to 
not raise “unable to open a console terminal” exception. But I want to run 
my application without root rights, because this increases my application’s 
security.

There are some posts on forums that recommend setting SDL_NOMOUSE=1 
environment variable before initializing pygame which should skip mouse 
initialization and maybe make it possible to get rid of sudo, but this 
doesn’t work for me: I still need to use sudo and mouse pointer is still 
there.

If this makes any difference, I have no mouse or keyboard attached to the 
Raspberry Pi, I connect to it using SSH.

I use

Pygame version 1.9.2~pre~r3348-2~bpo8+rpi1

libsdl-image1.2 version 1.2.12-5+b1

libsdl1.2debian version 1.2.15-10+rpi1

 

Does SDL_NOMOUSE work for anyone using recent Pygame versions?

Is it possible to skip mouse initialization in Pygame?

P.S. This question was originally posted on StackExchange 
<https://raspberrypi.stackexchange.com/questions/69007/how-to-completely-disable-mouse-in-pygame>,
 
but it seems I chose the wrong section. For this reason or another, I 
haven’t got any straight answer yet, so I write here and hope for the best 
:)

Reply via email to