Raspberry Pi ちょっと便利なコマンドボタン(application menu)

アプリケーションランチャ(application menu)は以前から作成、設置しているものですがdevilspie2に変更したこと、ボタン作成ルールを設けたこともあって再度作成手直し、前回のsurfブラウザの起動にも対応してみたいと思います。

今回は取り敢えず3個のボタンを作成、pulse(surf)の起動またdevilspie2の設定補助ツールとして活用します。
一定の確認が取れれば自由にボタンを増やしていけると思います。

application menu作成

ボタンはテキストエディタのgeany pi4ボタン(pulse.php)そしてExitボタンとします。

ボタンは3個ですが一列5個を並べる予定
ファイルは~/bin/app-menu.pyとします

アイコンディレクトリは~/.icons/32×32/ アイコンファイルを用意サイズ32×32
ボタン番号などはボタンを増やしても被ることが無いよう適当な番号を割り振っています。
def 関数名はcommand=関数名の関係が合っていれば変更可
ボタンなし関数reloadを最後の方に記述しています。
~/bin/app-menu.py

#!/usr/bin/python3

from tkinter import *
from tkinter import ttk
from tkinter import messagebox
import subprocess
import time

root = Tk()
root.title('Application Menu')
root.configure(background='#333333') # Background color
style = ttk.Style()
style.theme_use('default') #('clam', 'alt', 'default', 'classic')
style.configure('TButton', background='#D9D9D9') # Button color

# Frame as Widget Container
frame1 = ttk.Frame(
    root,
    padding=5)
frame1.grid()

# icon dir
dir = "~/.icons/32x32/"

# Button131 geany
def ed131():
    subprocess.run("geany 2>/dev/null &", shell=True)
icon131 = PhotoImage(file=dir+'geany.png')
button131 = ttk.Button(frame1,image=icon131,command=ed131)
button131.grid(row=1,column=1)

# Button408 pi4 surf_pulse
def mul408():
    subprocess.run("surf pi4://html/pulse.php 2>/dev/null &", shell=True)
    time.sleep(3)
    reload()
icon408 = PhotoImage(file=dir+'raspberrypi-bk.png')
button408 = ttk.Button(frame1,image=icon408,command=mul408)
button408.grid(row=1,column=3)

# Button exit
def exit():
    reload()
    subprocess.run("killall app_menu.py && ~/bin/app_menu.py &", shell=True)
icon115 = PhotoImage(file=dir+'exit.png')
button115 = ttk.Button(frame1,image=icon115,command=exit)
button115.grid(row=1,column=5)

# devilspie2 reload
def reload():
    subprocess.run("killall devilspie2 && sleep 0.5 && devilspie2 &", shell=True)

root.mainloop()

実行権限を与えてターミナルから実行

$ cd ~/bin
$ chmod 755 app-menu.py
$ ./app-menu.py

ボタンメニューが起動するはずです。エラーが出る場合はメッセージからエラー箇所を修正

devilspie2 application menu


設定ファイルの編集にはgeanyが便利
ボタンメニューからテキストエディターgeanyを起動、前回作成した~/.config/devilspie2/applications.luaを開いてApplication Menuを追加

window_name “Application Menu”はapp-menu.pyのroot.title(‘Application Menu’)

-- Application Menu
if (get_window_name()=="Application Menu") then
  set_window_geometry2 (797,24,225,52)
  pin_window()
  -- shade()
end

ボタン Exit

Exitボタンはdevilspie2,app-menu.pyを再起動

devilspie2を再起動することで設定した位置、サイズを適用、geometryを変更しながら目的の位置、サイズを追い込んでいきます。
app-menu.pyの再起動はメニューにボタンを追加、変更した際に設定が反映されます。app-menu.py編集後起動に失敗したらターミナルから実行、原因を特定修正

起動が確認できたらautostartに登録、OS再起動
~/.config/autostart/app-menu.desktop (新規作成)

[Desktop Entry]
Type=Application
Name=Application Menu
Exec=/home/pi/bin/app-menu.py


前回作成したPi4(音量コントロール)は実行後3秒のsleepを入れてdevilspie2を再起動することで設定値の位置、サイズ変更を実現しています。

当サイトではapp-menu.pyはpin_window() shade() を有効にしています。全ワークスペースに配置、タイトルバーのみで起動しています。
アプリケーションの実行後reload()を記述することでメニューを巻き上げ、devilspie2で設定起動しているアプリケーションは設定値に再配置されます。


当サイトでは9個のワークスペースを設置しています。
アプリケーションはdevilspie2で使いやすい位置、サイズを設定。shellスクリプト+xdotoolでワークスペースを切り替えながら4個のvncviewer 9個のターミナル、ほかアプリケーションをOS起動時に自動実行しています。
ターミナルはxtermで-geometryを指定、作業はできるだけvncserver側で実行するようにしているのでPi3がコケることも少なくなりました。