KeyboardPushed auf Raspi 5 ohne Funktion

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
TBirdTom
Beiträge: 5
Registriert: 29.12.2024 19:14

KeyboardPushed auf Raspi 5 ohne Funktion

Beitrag von TBirdTom »

Hallo und einen guten Tag.

Ich möchte eine Anzeigetafel auf einem Raspi 5 mit aktuellem Betriebssystem (Bookworm, 64bit) programmieren. Das macht grundsätzlich kein Problem. Das einzige Problem, an demich scheitere ist, dass ich mit der ESC-Taste das Programm beenden möchte. Klingt sehr einfach und ich habe dies unter Windows 10 auch zum laufen bekommen. Aber auf dem Raspi wil mir das nicht gelingen.

Hier mal mein letzter Code. Diese habe ich nur zum Testen mal geschrieben und vereinfacht:

Code: Alles auswählen

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Sprite system can't be initialized", 0)
  End
EndIf

OpenScreen(1920,1080,24,"Test",#PB_Screen_SmartSynchronization)
;KeyboardMode(#PB_Keyboard_International)
ClearScreen(RGB(0,0,140))

StartDrawing(ScreenOutput())
DrawText(10,10,"Das ist ein Test")
StopDrawing()

FlipBuffers()

Repeat ;Schleife, welche sich selbst beendet
  ExamineKeyboard()
  ;FlipBuffers()
  
  If KeyboardPushed(#PB_Key_All) ;Funktioniert auch nicht mit ALL. Diese IF Anweisung wird auch bei Tastendruck ignieriert.
    Debug "Taste erkannt"
    End
  EndIf
  
  a + 1
  Delay(20)
Until a>100

CloseScreen()
Debug "Ende erreicht..."
Der Code läuft immer bis zum Ende durch, anstatt bei einem Tastendruck das Programm zu beenden.

Ich verwende eine Funktastatur. Davon habe ich mehrere rumliegen. Aber bei keiner funktioniert es.
Ich habe fast die Vermutung, dass es an eine Bibliothek liegt. Aber leider nicht an welcher. Anderen Anwendungen laufen auf dem Raspi problemlos.
Ich verwende die Purebasic-Version 6.20 für Raspi. Auf meinem Windowsrechner läuft ebenfalls die 6.20.

Vielen Dank schon mal im voraus und ich hoffe, dass ich keinen Foreneintrag mit des Rätsels Lösung übersehen habe.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Re: KeyboardPushed auf Raspi 5 ohne Funktion

Beitrag von Macros »

Hallo TBirdTom, willkommen im Forum :D

Dein Code schaut ordentlich aus.
Was mir auffällt: FlipBuffers() hast du auskommentiert. In der Hilfe wird jedoch erwähnt, dass der Aufruf nötig ist um Tastaturereignisse korrekt abzuarbeiten (Hilfe von ExamineKeyboard())

Auf meinem Desktop unter Kubuntu Linux 24.04 funktioniert er dennoch auch mit dem auskommentierten Aufruf.

An der Tastatur kann es nicht liegen korrekt. So lang sie in einem Texteditor oder sonstwo funktioniert sieht dein Programm keinen Unterschied zwischen verschiedenen Tastaturen.

Ich glaube ich hab noch einen Raspi 3B herumliegen. Falls ich nachher mal Zeit habe, und FlipBuffers() einzukommentieren nicht hilft, kann ich da schnell Debian draufspielen und sehen ob der Fehler auch auftritt. Interessant wäre für den Test dann noch die Oberfläche die du unter Debian nutzt, ob KDE, Gnome oder LXDE. (Falls dir das nichts sagt, rufe einfach "echo $XDG_CURRENT_DESKTOP" in einer Konsole auf)
Bild
TBirdTom
Beiträge: 5
Registriert: 29.12.2024 19:14

Re: KeyboardPushed auf Raspi 5 ohne Funktion

Beitrag von TBirdTom »

Hallo Macros,
vielen Dank für die schnelle Antwort.

Nun ja, meine Erfahrungen mit Linux halten sich sehr in Grenzen. Ich bin mit MS-DOS und Windows groß geworden. Wenn man jetzt mal die Sinclair- und Commodore-Rechner weg lässt (oh bin ich alt) :D ...

Die angezeigte Version sieht wie folgt aus: labwc:wlroots
Kernel: Linux raspi5 6.6.74+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.6.74-1+rpt1 (2025-01-27) aarch64 GNU/Linux

Distribution:
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm


Ich nutze hier den Standard von der Rapberry Seite.
Die Versionen für Kernel und Distribution habe ich mit Hilfe von Google herausgefunden. Nicht das hier der Eindruck entsteht, dass ich Ahnung habe.

FlipBuffers() hatte ich bereits schon probiert. Hatte leider auch nicht zum Erfolg geführt. Aus diesem Grund habe ich es wieder auskommentiert.
Ebenso habe ich mit den KeyboardMode() experimentiert. Ich habe ja eine QWERTZ-Tastatur dran. Aber auch das brachte kein Erfolg.

Vielen Dank noch mal...
TBirdTom
Beiträge: 5
Registriert: 29.12.2024 19:14

Re: KeyboardPushed auf Raspi 5 ohne Funktion

Beitrag von TBirdTom »

Hallo noch mal.

Deine Frage nach der Oberfläche hat mich etwas nachdenklich gemacht. Ich vermute mal, dass man die Geschichte auch als Windowsmanager oder so bezeichnet. Der Raspi bietet über dem Befehl raspi-config die Möglichkeit, eine von 3 Optionen zu wählen:
  • X11
  • Wayfire
  • Labwc
Nach einem der letzten Updates wollte der Raspi von Wayfire auf Labwc umschalten, was ich auch bestätigt hatte. In einem Artikel stand, dass nur noch Labwc weiterentwickelt werden soll.

Aber nun zum Thema zurück: Ich habe alle 3 Optionen getestet. Bei der Einstellung in X11 funktionierte die Abfrage der Taste und ich konnte das Programm vorzeitig verlassen.

Für meinen Fall würde es vermutlich die Lösung sein. Sollte aber zukünftig nur noch Labwc weiterentwickelt werden, wäre die Frage, wie man es damit hinbekommt.

Ich muss dazu sagen, dass auch das Thema "Bildschirm per Software aus- und einschalten" beim Raspberry eine Odysee zu sein scheint. Da gab es allein in den letzten Jahren mehrere Ansätze und Befehle.

Vielen Dank!
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Re: KeyboardPushed auf Raspi 5 ohne Funktion

Beitrag von Macros »

Freut mich,
dass ich dir den Gedankenanstoß zur Lösung geben konnte. Und gut, dass du sie genannt hast, so können andere das Problem auch umgehen.

Um dir kurz die Hintergründe zu erklären:

Linux hat als Unterbau für alle graphischen Oberflächen seit Urzeiten X11 (stammt noch vom Vorgänger Unix von 1984). Mit der Zeit kamen immer neue Features hinzu und die Welt hat sich gewandelt was die PC Nutzung betrifft. So wurde der Code immer größer, chaotischer und neue Features wie HDR zu unterstützen würde massivste Umbauarbeiten erfordern. Es wurde Zeit für einen Nachfolger.

Hier kommt Wayland ins Spiel, worauf sowohl Wayfire wie Labwc aufbauen. Neu modern, sicherer und flotter. Inzwischen auch stabil. Aber manch Software kommt mit den neuen Sicherheitseinschränkungen nicht klar. Schön siehst du das wenn du das Programm xeyes startest. Unter X11 folgen die Augen deinem Mauszeiger über den ganzen Bildschirm. Unter Wayland "sieht" das Programm den Mauszeiger nur solange er über dem eigenen Fenster ist, weil es keine Rechte angefordert hat den ganzen Bildschirm aufnehmen zu können. Wegen der Kompatibilität kommen viele Linux Versionen noch mit X11 und gerade wird allmählich umgestellt.

Also ja, da hat PureBasic vermutlich einen Bug. Wenn ich nachher fertig mit meiner Arbeit bin, starte ich eine Wayland Session, bestätige es und mache einen Bugreport.

So lange du X11 nutzt kannst du den Bildschirm übrigens mit "xset dpms force off" zuverlässig ausschalten.

Code: Alles auswählen

RunProgram("/usr/bin/xset","dpms force off","")
Bild
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: KeyboardPushed auf Raspi 5 ohne Funktion

Beitrag von Shardik »

TBirdTom hat geschrieben: Aber nun zum Thema zurück: Ich habe alle 3 Optionen getestet. Bei der Einstellung in X11 funktionierte die Abfrage der Taste und ich konnte das Programm vorzeitig verlassen.
Hast Du für Wayland (Wayfire und Labwc) auch die in PB 6.20 neu hinzugekommene CheckBox "Enable Wayland support" (in Menüleiste: "Compiler" > "Compiler-Optionen..." im Karteireiter "Compiler-Optionen") aktiviert? Vielleicht funktioniert es dann ja auch mit Wayland...
Benutzeravatar
mk-soft
Beiträge: 3852
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: KeyboardPushed auf Raspi 5 ohne Funktion

Beitrag von mk-soft »

Bei mir habe ich mein Raspberry PI 5 auf X11 umgestellt ... (sudo raspi-config)
Da funktioniert es mit der Tasten und die Ausgabe.

Zum testen mal auf Wayland zurückgestellt.
Hier funktioniert Keyboard nicht und die Ausgabe ist nur am flimmern.

Alternative mit CanvasGadget und GTK Fullscreen !

Update 2

Code: Alles auswählen

;-TOP

#ProgramTitle = "Main Window"
#ProgramVersion = "v1.01.2"

Enumeration Windows
  #Main
EndEnumeration

Enumeration MenuBar
  #MainMenu
EndEnumeration

Enumeration MenuItems
  #MainMenuFullScreen
  #MainMenuUnfullScreen
  #MainMenuAbout
  #MainMenuExit
EndEnumeration

Enumeration Gadgets
  #MainCanvas
EndEnumeration

Enumeration StatusBar
  #MainStatusBar
EndEnumeration

Procedure MyDrawCanvas()
  Protected dx, dy
  Protected text.s
  
  If StartDrawing(CanvasOutput(#MainCanvas))
    dx = GadgetWidth(#MainCanvas)
    dy = GadgetHeight(#MainCanvas)
    Box(0, 0, dx, dy, $E16941)
    text = "Press Escape!"
    dx2 = TextWidth(text)
    DrawText(dx / 2 - dx2 / 2, dy / 2, text)
    StopDrawing()
  EndIf
EndProcedure

Procedure UpdateWindow()
  Protected dx, dy
  dx = WindowWidth(#Main)
  dy = WindowHeight(#Main) ; - MenuHeight()
  ; Resize gadgets
  ResizeGadget(#MainCanvas, 0, 0, dx, dy)
  MyDrawCanvas()
EndProcedure

Procedure Main()
  Protected dx, dy
  
  #MainStyle = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
  
  If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 800, 600, #ProgramTitle , #MainStyle)
    ; Menu
    
;     CreateMenu(#MainMenu, WindowID(#Main))
;     MenuTitle("&File")
;     CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
;       MenuItem(#PB_Menu_About, "")
;     CompilerElse
;       MenuItem(#MainMenuAbout, "About")
;     CompilerEndIf
;     ; Menu File Items
;     MenuBar()
;     MenuItem(#MainMenuFullScreen, "Fullscreen")
;     MenuItem(#MainMenuUnfullScreen, "Unfullscreen")
;     
;     CompilerIf Not #PB_Compiler_OS = #PB_OS_MacOS
;       MenuBar()
;       MenuItem(#MainMenuExit, "E&xit")
;     CompilerEndIf
;     
    ; StatusBar
    ;CreateStatusBar(#MainStatusBar, WindowID(#Main))
    ;AddStatusBarField(#PB_Ignore)
    
    ; Gadgets
    dx = WindowWidth(#Main)
    dy = WindowHeight(#Main) ; - MenuHeight()
    CanvasGadget(#MainCanvas, 0, 0, dx, dy)
    
    ; Bind Events
    BindEvent(#PB_Event_SizeWindow, @UpdateWindow(), #Main)
    
    ; Add Keyboard Shortcut
    AddKeyboardShortcut(#Main,#PB_Shortcut_Escape, #MainMenuExit)
    
    gtk_window_fullscreen_(WindowID(#Main))
    PostEvent(#PB_Event_SizeWindow)
    
    ; Event Loop
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Select EventWindow()
            Case #Main
              Break
              
          EndSelect
          
        Case #PB_Event_Menu
          Select EventMenu()
            CompilerIf #PB_Compiler_OS = #PB_OS_MacOS   
              Case #PB_Menu_About
                PostEvent(#PB_Event_Menu, #Main, #MainMenuAbout)
                
              Case #PB_Menu_Preferences
                
              Case #PB_Menu_Quit
                PostEvent(#PB_Event_CloseWindow, #Main, #Null)
                
            CompilerEndIf
            
          Case #MainMenuAbout
            MessageRequester("About", #ProgramTitle + #LF$ + #ProgramVersion, #PB_MessageRequester_Info)
              
          Case #MainMenuExit
            PostEvent(#PB_Event_CloseWindow, #Main, #Null)
            
          Case #MainMenuFullScreen
            ;SetWindowColor(#Main, #Black)
            gtk_window_fullscreen_(WindowID(#Main))
            
          Case #MainMenuUnfullScreen
            gtk_window_unfullscreen_(WindowID(#Main))
            SetWindowColor(#Main, #PB_Default)
            
          EndSelect
          
        Case #PB_Event_Gadget
          Select EventGadget()
              
          EndSelect
          
        Case #PB_Event_LeftClick
          gtk_window_unfullscreen_(WindowID(#Main))
          SetWindowColor(#Main, #PB_Default)
          
      EndSelect
    ForEver
    
  EndIf
  
EndProcedure : Main()
Zuletzt geändert von mk-soft am 01.03.2025 02:59, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
TBirdTom
Beiträge: 5
Registriert: 29.12.2024 19:14

Re: KeyboardPushed auf Raspi 5 ohne Funktion

Beitrag von TBirdTom »

Vielen Dank für die Antworten.

Macros, Mamanchmal braucht es mal einen anderen Gedanken. Aber hier sicher Zufall, dass ich darauf gekommen bin. Ich werde erstmal X11 nutzen. Das ist tatsächlich erstmal kein Problem, da das Programm nur für ca. ein halbes Jahr laufen soll und nichts anderes durch den Raspi zu erledigen ist. Nächstes Jahr dann wieder neues Glück. Die Zeit sowie die Entwicklungen laufen ja weiter...
Vielen Dank auch für die kleine Einführung in die Geschichte von Linux. Ich selbst habe mich erst ab den Raspberry etwas damit beschäftigt. Ich hatte auch mal Knoppix verwendet, um einen Windows-Rechner wiederzubeleben. Mehr aber auch nicht. Aber sehr interessant.

Den Befehl zum Bildschirm ausschalten werde ich mal Probieren. Mein letztes mal hatte ich vcgencmd genutzt. Zwischendurch ging diese Funktion aber auch nicht mehr. :lol:

MK-Soft und Shardik:
Die Option im Compiler war mir nicht bekannt. Vielen Dank für diese Info. Ich habe es gleich noch mal probiert. Unter Labwc das gleiche Verhalten. Keine Reaktion auf Tastatureingaben. Ich hatte dazu die Option im Compiler aktiviert.

MK-Soft: Das Flimmern, welches du wahrgenommen hast könnte davon herrühren, dass du eventuell die FlipBuffers-Funktion in der Repeat-Schleife nicht auskommentiert hast. Das Testprogramm schreibt nur auf einen Buffer, der zweite bleibt leer. Für meinen Test hat mir das so gereicht. Ich wollte ja nur die Tastatureingabe testen.

Vielleicht handelt es sich ja doch um einen Bug "irgendwo" oder es fehlt noch ein Treiber/Modul, welches ich nicht installiert habe...
Ich wünsche euch ein wunderschönes Wochenende!
TBirdTom
Beiträge: 5
Registriert: 29.12.2024 19:14

Re: KeyboardPushed auf Raspi 5 ohne Funktion

Beitrag von TBirdTom »

@mk-soft: Dein Programm werde ich mir sehr gern mal anschauen. Sieht sehr interessant aus. Muss ihn aber erstmal verstehen. Danke dafür.
Antworten