G-M
G-M

Reputation: 346

Display GUI on Raspberry Pi without startx

I'm currently playing with my brand-new raspberry with adafruit's touch-tft and raspberry Cam.

I noticed, if I run raspivid -p, it displays the preview in a frame on top of the bash.

How can I create an application (java, python, c++(preferred)) to display a GUI without having to startx?

I'd love to use adafruit's touch-tft for a project, but startx needs a lot of resources. Of course it would be cool to have the touch-functionality too.

Edit:

Maybe I expressed myself a little bit confusing: I would like to create an application that doesn't need startx but has some kind of GUI.

The answers below aren't 100% ready to go but they pointed me to the right direction. Since I saw many similar questions I will try to give a step-by-step solution:

  1. Setup your raspberry with adafruit's TFT: https://learn.adafruit.com/adafruit-pitft-28-inch-resistive-touchscreen-display-raspberry-pi/overview (you don't have to replace the TFT with HDMI as standart display)

  2. be sure FRAMEBUFFER=/dev/fb1 startx is running correctly on the TFT screen, I have my TV plugged in the HDMI port, this way I can use the bash on the TV screen and run x on the TFT

  3. Follow this tutorial to create your first pygame: http://www.pygame-doku.laymaxx.de/tut/intro/intro.html (you can just copy&paste, wget ball.gif)

  4. Insert this 2 lines at the beggining: (github.com/notro/fbtft/wiki/Pygame)

    import os
    os.environ["SDL_FBDEV"] = "/dev/fb1"
    
  5. If you want to test the touch-screen to, you can change Line 15: From:

    if event.type == pygame.QUIT: sys.exit()
    

    To:

    if event.type == pygame.MOUSEBUTTONDOWN: sys.exit()
    

    This will exit the application if you touch the screen

  6. Save file e.g. pygame1.py and execute with $python pygame1.py

You should now see a bouncing ball on your TFT while the HDMI output still displays the BASH on your TV (but it isn't active of course) touching the screen will exit the game if you completed step 6

Why I'm doing this? This way you can display a simple GUI with e.g. buttons to do some action, like turn your lights on/off if you use your RPI for home-control.

Upvotes: 17

Views: 36578

Answers (4)

Dimitry K
Dimitry K

Reputation: 2356

You can use for example pygame library! check this tutorial http://archive.furtherfield.org/rp-resources/RP-workshop-handout.pdf pg. 17

Upvotes: 11

Alix
Alix

Reputation: 11

Check out Urwid, a text-based ui that can run in a terminal, or, I assume, on a Raspberry Pi started up without startx.

Upvotes: 1

Bmuller
Bmuller

Reputation: 239

Below, you will find a detailed description of how to be a minimal window manager to start a graphics program of your choice.

-Install Required Packages:

apt-get update
apt-get install xorg - no-install-recommends gdm3 matchbox-window-manager Iceweasel rsync-y

-The system in question, select Add a new user interface gdm3. The terminal is the default name will be used.

adduser kiosk

-Create-Xsession. This script will be executed when the user logs on.

xset s off
xset -dpms
matchbox-window-manager &
while true; do
rsync -qr --delete --exclude='.Xauthority’ /opt/kiosk/ $HOME/
firefox http://www.google.com (Replace your application!!!)
done

Save Ctrl + O; Exit: Ctrl + X

chmod a + x. xsession
cp / opt / kiosk / .xsession / home / kiosk

Set Auto-Login. Kiosk user will enter automatically after boot.

nano / etc/gdm3/daemon.conf
[Daemon]
AutomaticLoginEnable = true
AutomaticLogin = kiosk

We have chosen to configure, program, if necessary

-Screen calibration when not loaded up the whole screen:

/ Boot / config.txt file, clear the comment:
disable_overscan = 1

I hope I helped

Upvotes: 7

Kei
Kei

Reputation: 771

In short you can't, applications like gedit are built atop of a desktop environment (e.g. Gnome, Kde).

Upvotes: -1

Related Questions