動かざることバグの如し

近づきたいよ 君の理想に

ssh越しにsudoでGUIアプリ起動する方法

環境

発端

MacOSからubuntusshしてsshX11 Forwardingを利用してGUIアプリをMacOS側に表示させていた

XQuartzを使っている

GSmartControl を使おうと思って sudo gsmartcontrol してみたがエラーになった

$ sudo gsmartcontrol
X11 connection rejected because of wrong authentication.

(gsmartcontrol:3072): Gtk-WARNING **: 08:10:34.175: cannot open display: localhost:14.0

ちなみにgsmartcontrolは、SMART(Self-Monitoring, Analysis and Reporting Technology)というハードディスクやSSDの健康状態を監視する技術を利用して、ストレージデバイスの状態やパフォーマンスをチェックすることができるツール

解決策

$ sudo DISPLAY=$DISPLAY XAUTHORITY=/home/thr3a/.Xauthority gsmartcontrol

ポイント

  • sudoは、スーパーユーザー(管理者)としてコマンドを実行するためのプログラムです。gsmartcontrolは、デバイスの情報にアクセスするために管理者権限が必要なので、sudoを使っています。
  • DISPLAY=$DISPLAYは、環境変数DISPLAYの値をそのまま引き継ぐという意味です。DISPLAYは、X Window SystemというGUI環境で、どの画面に表示するかを指定するための変数です。この部分は、sudoで実行すると環境変数が引き継がれない場合があるので、明示的に指定しています。
  • XAUTHORITY=/home/thr3a/.Xauthorityは、X Window Systemの認証情報を格納したファイルの場所を指定するものです。このファイルは、ユーザーがログインしたときに自動的に作成されます。この部分も、sudoで実行すると認証情報が失われる場合があるので、明示的に指定しています。

参考リンク