web-dev-qa-db-ja.com

FlatPakアプリケーションとして起動されたウィンドウの実行可能ファイルパスを取得するにはどうすればよいですか?

そんなこと知ってる

xprop | awk '/PID/ {print $3}' | xargs ps

そして

xprop | awk '/COMMAND/ {print $4}' | xargs which

deb-packaged、AppImage'd、またはSnap'dのGUIアプリケーションでうまく機能します。

ただし、この方法では、FlatPakとしてパッケージ化されているアプリケーションの実行可能ファイル名は提供されません。
以下の例を参照してください:

$ flatpak run org.libretro.RetroArch

$ xprop 
_NET_WM_VISIBLE_NAME(UTF8_STRING) = "RetroArch   (as superuser)"
WM_NAME(STRING) = "RetroArch  "
_NET_WM_ICON_GEOMETRY(CARDINAL) = 446, 744, 207, 24
WM_PROTOCOLS(ATOM): protocols  WM_DELETE_WINDOW
XKLAVIER_STATE(INTEGER) = 0, -180379392
_NET_WM_STATE(ATOM) = 
WM_STATE(WM_STATE):
      window state: Normal
      icon window: 0x0
_NET_FRAME_EXTENTS(CARDINAL) = 3, 3, 23, 3
_NET_WM_DESKTOP(CARDINAL) = 0
_NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_SHADE, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_CLOSE, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW
WM_CLIENT_MACHINE(STRING) = "norbert-UX32A"
_NET_WM_PID(CARDINAL) = 2
WM_CLASS(STRING) = "retroarch", "retroarch"
_NET_WM_ICON(CARDINAL) =  Icon (16 x 16):
                  
    ▓▓▓▓▓▓▓▓▓▓▓   
   ▓▓▓▓▓▓▓▓▓▓▓▓▓  
   ▓▓▓▓▓▓▓▓▓▓▓▓▓  
   ▓▓▓ ▓▓▓▓▓ ▓▓▓  
   ▓ ▓▓ ▓▓▓ ▓▓ ▓  
   ▓ ▓       ▓ ▓  
   ▓   ▓   ▓   ▓  
   ▓           ▓  
   ▓▓         ▓▓  
   ▓▓▓ ▓▓▓▓▓ ▓▓▓  
   ▓▓ ▓▓▓▓▓▓▓ ▓▓  
   ▓▓▓▓▓▓▓▓▓▓▓▓▓  
   ▓▓▓▓▓▓▓▓▓▓▓▓▓  
    ▓▓▓▓▓▓▓▓▓▓▓   
                  

そのため、xprop出力にPIDまたはCOMMAND関連の行が表示されません。しかし、もちろんそれは起動されます:

$ flatpak ps
Instance  PID   Application            Runtime
752290322 23857 org.libretro.RetroArch org.kde.Platform

xpropwmctrlなどを使用しているときに、FlatPakアプリケーションによって作成されたウィンドウのPIDを取得するにはどうすればよいですか?

3
N0rbert

ほとんどの場合、フラットパック権限(サンドボックス)ではこのAFAICTは許可されません。システムのどれだけが公開されているかはある程度設定可能であるため、どのフラットパックについて話しているのかが問題になる可能性があります。これと他のフラットパック関連のトピックについては多くの情報があります こちら

注目すべきセクションの1つは http://docs.flatpak.org/en/latest/sandbox-permissions.html です。

フラットパックの実行可能ファイルのパスを特定する1つの代替アプローチは、構成ファイルをチェックすることです。以下の抜粋。

flatpakは、システム全体またはユーザーごとのモードで動作できます。システム全体のデータは$ prefix/var/lib/flatpak /にあり、ユーザーごとのデータは$ HOME/.local/share/flatpak /にあります。

デフォルトのインストール場所に加えて、構成ファイル/etc/flatpak/installations.d/を介してより多くのシステム全体のインストールを定義できます。これには.conf拡張子が必要で、通常、Path=/location/of/installationの形式でインストールパスが含まれます。 。詳細については、 インストールドキュメント を参照してください。

1
Elder Geek