バイナリファイル名とGUIの名前

バイナリファイル名とGUIの名前

icedove>基本設定>添付ファイルで、「JEPG画像」に「画像ビューア」または「他の項目を使用...」を選択できます。私のシステムでは、「Image Viewer」が実際に「/usr/bin/eog」であることがわかりました。コマンドラインでeogを開いた後、「ヘルプ>情報」をクリックすると「イメージビューア」...「GNOMEイメージビューア」が表示されるのでわかります。実際のバイナリが何であるかについての手がかりを提供していないので、プログラムがicedoveで「Image Viewer」の名前を「通って」開くときに実際のバイナリが何であるかをどうやって知ることができますか?どこかにテーブルがありますか?それとも関連リストがありますか?上記は単なる例であり、この問題はすべてのGUIに存在します。これは、LinuxがWindowsと同じくらい愚かで無力になろうとする悲しい例です。

ベストアンサー1

Unixの世界ではXウィンドウシステム(X11)1。 「適用」という概念はありません。重複するが正確に一致しないいくつかの概念があります。

  • バッグ- パッケージマネージャからアプリケーションをインストールするために選択した名前。パッケージマネージャを介してインストールしないと、公式パッケージ名がない可能性があります。パッケージには複数のアプリケーションを含めることができます。
  • 実行可能ファイル- アプリケーションを実行するために実行されるファイル。実行可能ファイルには、情報が含まれているか含まれない可能性があるファイル名があります(アプリケーションのパスが、またはそうでない/usr/bin/foo場合)。/opt/myapp/bin/run/home/alice/work/dev/a.out
  • プロセス- メモリ内のアプリケーションのインスタンス。実行ファイルを実行すると、プロセスが作成されます。正確にプロセス名とみなされるのは複雑で、多少システムによって異なりますので、ここではこれについて完全に議論しません。ほとんどの場合、プロセス名は実行可能ファイルのファイル名であると考えることができます。
  • トップレベルWindows- 「GUI」の定義に従って、GUIプログラムはこれらのうちの少なくとも1つを生成します。ウィンドウには名前に関連するいくつかの項目があり、すべて次のように検索できます。特性そして誤解を招く名前もあります。

    • WM_NAME実際にはウィンドウのタイトルです。これは、ウィンドウマネージャがタイトルバーとタスクリストに表示する内容です。人が読めるようにし、ウィンドウの存続期間中に頻繁に変更する必要があります(たとえば、別のファイルを開くとき、別のタブに切り替えるときなど)。
    • WM_ICON_NAMEと似ていますWM_NAMEが、ウィンドウを表すアイコンを表示するときに使用されます。
    • WM_CLASS名前のペア、つまりインスタンス名とクラス名。これらの名前は構成メカニズムで使用されます。XResources;バラより構成ファイルの「Xterm」または「xterm」簡単なご紹介をお願いします。デフォルトでは、これらの名前は、クラスが大文字でインスタンスが大文字でないことを除いて、通常は同じです。私はクラス名が「アプリケーション名」のための最高の競争相手だと思います。ただし、プログラムは異なるクラスを持つ複数のトップレベルウィンドウを表示できます。
  • アプリケーションには、名前を含むウィンドウを表示する「情報」という項目を含むメニューがあります。それが展開するのは純粋にアプリケーション開発者の選択です。

プロセスビューアは、テキストベースのビューア(例:pstopおよび)htopだけでなく、ほとんどのGUIビューア(例:gnome-system-propertiesやlxtask)は、トップレベルウィンドウではなくプロセスに関する情報のみを表示します。

これには技術的な理由があります。どのプロセスがどのウィンドウを表示するかを識別するための明確な方法はありません。同じウィンドウに複数のプロセスを描くことは可能ですが、非常にまれです。より一般的には、X11はネットワーク透過性であるため、プロセス表示ウィンドウがない可能性があります。つまり、アプリケーションはネットワーク経由でディスプレイインターフェイス(Xサーバー)にコマンドを送信できます。リモート接続で作成されたウィンドウを追跡するための完全なメカニズムもありません。

アプリケーションが協力的である場合(ほとんど協力的である場合)、2つのウィンドウ属性を使用してウィンドウ内のプロセスを追跡できます。

  • _NET_WM_PID:ウィンドウを作成したプロセスのプロセスID。
  • WM_CLIENT_MACHINE:プロセスが実行されているマシンのホスト名。

バラよりこのX11ウィンドウを作成するプロセスは何ですか?詳細については。_NEW_WM_PID次のコマンドラインツールを使用してプロパティを照会できます。xpropxdotoolwmctrl待つ。を使用すると、xpropすべてのプロパティを表示できます。xdotoolとを使ってxpropウィンドウをクリックすると、そのウィンドウに関する情報が表示されます。wmctrlすべてのウィンドウに関する情報を一覧表示できます。

xprop _NET_WM_PID WM_CLIENT_MACHINE  # and click on a window
xdotool selectwindow getwindowpid    # and click on a window
wmctrl -lp

プロセスIDが与えられると、実行可能ファイルへのパスなどのプロセスに関する情報を取得できます。たとえば、次のコマンドを実行した後にウィンドウをクリックすると、そのウィンドウを表示するアプリケーションに関する情報が表示されます。

ps -o args= -p $(xdotool selectwindow getwindowpid)

Linux で実行可能ファイルのパスを表示するには、次のようにします。

readlink /proc/$(xdotool selectwindow getwindowpid)/exe

¹X11を置き換えるためのプロジェクト(WaylandやMirなど)がありますが、X11のアプリケーション数を考慮すると遅くなり、十分な互換性が維持されている場合にのみ実現可能です。

おすすめ記事