📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の6版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
 
PolKit (以前は、PolicyKitとして知られていた) は、非特権ユーザセッションと特権システムコンテキストの間のネゴシエータとして機能するアプリケーションフレームワークである。<br>
<br>
PolKitは、ユーザ、グループ、名前により特定のアクションを制限する機能を持つ。<br>
ユーザセッションのプロセスが、システムコンテキストでアクションを実行するごとに、PolKitはクエリされる。
所謂、ポリシーで指定された設定に基づいて、"yes"、"no"、"needs authentication"である可能性がある。<br>
<br>
<code>sudo</code>のような古典的な権限承認プログラムとは異なり、PolKitはセッション全体に対してroot権限を与えるのではなく、各アクションに対してのみ権限を与える。<br>
<br><br>
<br><br>


7行目: 13行目:
PolKit-Qt-1のライセンスは、<u>LGPL-2.1</u>に基づく。<br>
PolKit-Qt-1のライセンスは、<u>LGPL-2.1</u>に基づく。<br>
<br>
<br>
Polkitは、Unix系システムでの権限管理と認可を制御するためのフレームワークであり、アプリケーションが特定のアクションを実行するために必要な権限を取得するための対話を提供する。<br>
<br>
Polkit-Qt-1ライブラリは、PolkitとQtアプリケーションを簡単に統合するためのツールキットである。<br>
PolKit-Qt-1は、Qtソフトウェアの開発者がPolKit APIを簡単に利用できるようにすることを目的としている。<br>
PolKit-Qt-1は、Qtソフトウェアの開発者がPolKit APIを簡単に利用できるようにすることを目的としている。<br>
<code>QAction</code>クラスと<code>QAbstractButton</code>ボタンの便利なラッパーもあり、これらのコンポーネントをPolKitと簡単に統合することもできる。<br>
<br>
また、<code>QAction</code>クラスと<code>QAbstractButton</code>ボタンの便利なラッパーもあり、これらのコンポーネントをPolKitと簡単に統合することもできる。<br>
<br>
<br>
PolKit-Qt-1は、以前のPolKit-Qtを直接置き換えるものではなく、PolKit-Qtのバックエンドであった旧PolicyKit(バージョン 0.9以下)と後方互換性はない。<br>
PolKit-Qt-1は、以前のPolKit-Qtを直接置き換えるものではなく、PolKit-Qtのバックエンドであった旧PolicyKit(バージョン 0.9以下)と後方互換性はない。<br>
現在、旧PolicyKitはメンテナンスされていないため、PolKit-Qtは、PolKit-Qt-1またはKAuth(KDEフレームワーク)に移植することが推奨される。<br>
現在、旧PolicyKitはメンテナンスされていないため、PolKit-Qtは、PolKit-Qt-1またはKAuth(KDEフレームワーク)に移植することが推奨される。<br>
<br>
Polkit-Qt-1ライブラリの主な特徴と機能を、以下に示す。<br>
* 権限管理の統合
*: Qtベースのアプリケーションが簡単にPolkitを使用して権限管理を行うことができる。
* シンプルなAPI
*: Qtのシグナルとスロットを活用して、直感的で使いやすいAPIを提供する。
* 非同期操作
*: 非同期に認証リクエストを処理するため、ユーザインターフェースがブロックされることを防ぐ。
* セキュリティ
*: Polkit-Qt-1を使用することにより、アプリケーションが必要な権限だけを要求し、ユーザのセキュリティを保護する。
<br>
<br>
PolKit-Qt-1は、以下に示す3つのライブラリに分かれている。<br>
PolKit-Qt-1は、以下に示す3つのライブラリに分かれている。<br>
40行目: 60行目:
==== ソースコードからインストールする場合 ====
==== ソースコードからインストールする場合 ====
PolKit-Qt-1のビルドに必要なライブラリをインストールする。<br>
PolKit-Qt-1のビルドに必要なライブラリをインストールする。<br>
# Qt 5を使用する場合
  sudo zypper install pkg-config glib2-devel polkit-devel \
  sudo zypper install pkg-config glib2-devel polkit-devel \
                     libQt5Core-devel libQt5Core-private-headers-devel libQt5Widgets-devel libQt5Widgets-private-headers-devel \
                     libQt5Core-devel libQt5Core-private-headers-devel libQt5Widgets-devel libQt5Widgets-private-headers-devel \
                     libQt5DBus-devel libQt5DBus-private-headers-devel libQt5Xml-devel
                     libQt5DBus-devel libQt5DBus-private-headers-devel libQt5Xml-devel libQt5Test-devel
# Qt 6を使用する場合
sudo zypper install pkg-config glib2-devel polkit-devel \
                    qt6-base-common-devel qt6-base-devel qt6-core-devel libQt5Core-private-headers-devel qt6-widgets-devel libQt5Widgets-private-headers-devel \
                    qt6-dbus-devel  libQt5DBus-private-headers-devel qt6-xml-devel qt6-test-devel
<br>
<br>
[https://github.com/KDE/polkit-qt-1 PolKit-Qt-1のGithub]または[https://invent.kde.org/libraries/polkit-qt-1/-/tags 公式のGitLab]にアクセスして、ソースコードをダウンロードする。<br>
[https://github.com/KDE/polkit-qt-1 PolKit-Qt-1のGithub]または[https://invent.kde.org/libraries/polkit-qt-1/-/tags 公式のGitLab]にアクセスして、ソースコードをダウンロードする。<br>
54行目: 80行目:
<br>
<br>
PolKit-Qt-1をインストールする。<br>
PolKit-Qt-1をインストールする。<br>
  cmake -DCMAKE_INSTALL_PREFIX=<PolKit-Qt-1のインストールディレクトリ> -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=TRUE \
# Qt 5を使用する場合
       -DSYSCONF_INSTALL_DIR=<PolKit-Qt-1のインストールディレクトリ> ..
cmake \
      -DCMAKE_C_COMPILER=<GCC 8以降のgccのパス> -DCMAKE_CXX_COMPILER=<G++ 8以降のg++のパス> \
      -DCMAKE_INSTALL_PREFIX=<PolKit-Qt-1のインストールディレクトリ> \
      -DCMAKE_BUILD_TYPE=Release \
      -DBUILD_EXAMPLES=ON        \
      -DBUILD_TEST=ON            \
      -DSYSCONF_INSTALL_DIR=<PolKit-Qt-1のインストールディレクトリ> \
      ..
# Qt 6を使用する場合
  cmake \
      -DCMAKE_C_COMPILER=<GCC 8以降のgccのパス> -DCMAKE_CXX_COMPILER=<G++ 8以降のg++のパス> \
      -DCMAKE_INSTALL_PREFIX=<PolKit-Qt-1のインストールディレクトリ> \
      -DCMAKE_BUILD_TYPE=Release \
      -DQT_MAJOR_VERSION=6      \
      -DBUILD_EXAMPLES=ON        \
      -DBUILD_TEST=ON            \
       -DSYSCONF_INSTALL_DIR=<PolKit-Qt-1のインストールディレクトリ> \
      ..
<br>
<br>
  make -j $(nproc)
  make -j $(nproc)
91行目: 135行目:
<br><br>
<br><br>


== PolKit-Qt-1を使用した開発例 ==
== PolKit-Qt-1を使用した開発例 1 ==
以下の例では、ネットワーク設定の変更に対する権限を確認して、必要に応じてユーザに対話を求めている。<br>
<br>
例えば、システム設定アプリケーションがシステムのネットワーク設定を変更しようとする場合、そのアクションには管理者権限が必要である。<br>
Polkit-Qt-1ライブラリを使用することにより、この権限を要求する対話を簡単に実装できる。<br>
<br>
<syntaxhighlight lang="cmake">
find_package(PolkitQt-1)
# Qt 5を使用する場合
target_link_libraries(<ターゲット名> PRIVATE
    PolkitQt5-1::Core
    PolkitQt5-1::Agent
)
# Qt 6を使用する場合
target_link_libraries(<ターゲット名> PRIVATE
    PolkitQt6-1::Core
    PolkitQt6-1::Agent
)
</syntaxhighlight>
<br>
<syntaxhighlight lang="c++">
#include <PolkitQt1/Authority>
#include <PolkitQt1/Action>
using namespace PolkitQt1;
Authority::Result result = Authority::instance()->checkAuthorizationSync("org.example.modify_network",
                                                                          Authority::Subject::fromSystemBusName("org.freedesktop.DBus"),
                                                                          Authority::AllowUserInteraction);
if (result == Authority::Yes) {
    // 権限が許可された場合の処理
}
else {
    // 権限が拒否された場合の処理
}
</syntaxhighlight>
<br><br>
 
== PolKit-Qt-1を使用した開発例 2 ==
==== 開発例に挙げるソフトウェア ====
==== 開発例に挙げるソフトウェア ====
実行ファイルの画面にあるボタンを押下する時、任意のディレクトリにroot権限でテキストファイルを作成または書き込みするソフトウェアを例に挙げる。<br>
実行ファイルの画面にあるボタンを押下する時、任意のディレクトリにroot権限でテキストファイルを作成または書き込みするソフトウェアを例に挙げる。<br>
122行目: 206行目:
*: ファイル名を、org.qt.policykit.examples.confファイルとする。
*: ファイル名を、org.qt.policykit.examples.confファイルとする。
* D-Busサービスファイル(D-Busアクティベーションファイル)
* D-Busサービスファイル(D-Busアクティベーションファイル)
*: ファイルの場所 : /usr/share/dbus-1/system-services
** ファイルの場所 (root権限等)
*: .service拡張子
**: /usr/share/dbus-1/system-services
*: <br>
**: <br>
** ファイルの場所 (一般ユーザ権限等)
**: /usr/share/dbus-1/services
**: <br>
*: D-Busでは、D-Busサービスにアクセスすると自動的にソフトウェアが実行される仕組みが存在する。
*: D-Busでは、D-Busサービスにアクセスすると自動的にソフトウェアが実行される仕組みが存在する。
*: この機能を使用する場合は、/usr/share/dbus-1/servicesディレクトリにD-Busサービスファイルを作成する必要がある。
*: この機能を使用する場合は、/usr/share/dbus-1/servicesディレクトリにD-Busサービスファイルを作成する必要がある。
*: これにより、D-Busインターフェースのメソッドにアクセスする前に、ヘルパー実行ファイルを手動で実行する必要がなくなる。
*: これにより、D-Busインターフェースのメソッドにアクセスする前に、ヘルパー実行ファイルを手動で実行する必要がなくなる。
*: <br>
*: <br>
*: <code>[D-BUS Service]</code>
*: <syntaxhighlight lang="ini"># /usr/share/dbus-1/system-services/org.qt.policykit.examples.serviceファイル
*: <code>Name=<D-Busサービス名></code>
 
*: <code>Exec=<ヘルパー実行ファイルのフルパス></code>
[D-BUS Service]
*: <code>User=root</code>
Name=<D-Busサービス名>
*: <br>
Exec=<ヘルパー実行ファイルのフルパス>
*: ファイル名を、org.qt.policykit.examples.serviceファイルとする。
User=root
</syntaxhighlight>
<br>
<br>


==== ヘルパー実行ファイルの開発 ====
==== ヘルパー実行ファイルの開発 ====
<syntaxhighlight lang="make">
  # SampleHelper.proファイル
  # SampleHelper.proファイル
   
   
183行目: 272行目:
  target.path = $${prefix}
  target.path = $${prefix}
  INSTALLS += target
  INSTALLS += target
</syntaxhighlight>
<br>
<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">