2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

この記事誰得? 私しか得しないニッチな技術で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

ラズパイでpygameを使ったアプリでウィンドウにフォーカスを当たっていなくてもジョイスティックの入力を取得したい

Posted at

結 論

xvfbを使って、仮想ディスプレイを作成して起動しましょう!

検証した環境

ラズパイ4Bで確認しました。

$ uname -a
Linux raspberrypi 6.6.31+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.6.31-1+rpt1 (2024-05-29) aarch64 GNU/Linux
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

背 景

  • ラズパイでGPIOに色んなでデバイスを接続して、ジョイスティックから操作したい
  • イベント処理やジョイスティック入力が機能として入っているので、pygameを選定
  • ラズパイはディスプレイに接続していない
    • デバッグ用にGUIを利用することがあるが、基本的にはディスプレイなしで実行したい

問題点

  • pygameの仕様上、ウィンドウにフォーカスが当たっていないと、ジョイスティックの入力が取得できない。
    • pygameのイベントの「pygame.JOYBUTTONDOWN」を来ない
    • ジョイスティックのボタンを押しながら、get_buttonしても入力が取得できない
    • よって、HDMIでディスプレイに接続するか、VNCで入らないと基本的にジョイスティックが使えない

解決方法

  • xvfbという、仮想ディスプレイを作成してスクリプトを起動する
  • xvfbとは?
    • 画面出力を表示せずに、すべてのグラフィック操作を仮想メモリ内で行うプログラム
    • X virtual framebufferの略
    • ソースはwikipedia

具体的な解決方法

xvfbのインストール

$ sudo apt update
$ sudo apt install xvfb

xvfbでpythonを起動

$ xvfb -a python main.py

おわりに

ラズパイ × pygameはおすすめです!

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?