Ubuntu Core DesktopとDesktop Session
2023年9月11日、「Ubuntu Core Desktop」を構成するコンポーネントの一つである「Desktop Session」に関する紹介が以下で行われました。Ubuntu Core Desktop
「Ubuntu Core Desktop」はいわゆるSnap版「Ubuntu Desktop」に相当する「Ubuntu Desktop」です。今までの「Ubuntu Core Desktop」に関する紹介は、以下を参照してください。
またSnapに関するドキュメントは、以下を参照してください。
Desktop Session
「Desktop Session」とは、ユーザーがデスクトップにログインする際に使用される仕組みです。現状でもそうですが、ユーザーはこの「Desktop Session」上でデスクトップを利用しています。
「Desktop Session」にはユーザーがデスクトップを利用するのに必要な仕組みが備わっています。
ユーザーから見ると、デスクトップ環境に相当するものと思えば分かりやすいでしょう。
様々なデスクトップ環境
Linuxの世界には様々なデスクトップ環境が存在しています。「Ubuntu」が採用している「GNOME」や「Kubuntu」が採用している「KDE Plasma」、「Xubuntu」が採用している「Xfce」など、例を挙げたら枚挙にいとまがありません。
これら様々なデスクトップ環境を提供するのが「Desktop Session」の役割になります。
Ubuntu Core Desktop の Desktop Session
ご存知の通り「Ubuntu」では「GNOME」を採用しており、「Ubuntu Core Desktop」の「Desktop Session」は「GNOME」環境を提供する「Desktop Session」になります。この「Desktop Session」はもちろんSnapで提供され、GNOMEデスクトップを提供するために必要なすべてのデスクトップサービスを提供します。
「Ubuntu Core Desktop」の「Desktop Session」を指して「Ubuntu Desktop Session」と表現しています。
Snapで提供されるということは「Desktop Session」は他のSnapから隔離された環境に配置されるということであり、特権サービスを実行するための領域はそこには存在しないということです。
これはSnapが持つ特徴の一つです。
システムにどうやってアクセスすればよいのか
デスクトップアプリはハードウェアアクセラレーションを活用して動画を再生したり、ゲームを実行したり、あるいはサウンドを再生したりインターネットに接続するなど、システムと連携して動作します。これらはいずれもシステムへのアクセスが必要となります。
しかしSnapは隔離された環境にソフトウェアが配置されるため、そのままではデスクトップアプリはシステムにアクセスできません。
Snapとインターフェース
そこで出てくるのがSnapが提供する仕組みの一つであるインターフェースです。インターフェースはSnapで配置されているソフトウェアが別のSnapで配置されているソフトウェアと連携する仕組みです。
Snap同士はお互いがお互いに隔離された環境に配置されていますが、インターフェースにより別のSnapが提供する機能にアクセスできます。
インターフェースはプラグとスロットで構成されています。
プラグは機能を利用する側が持つものであり、スロットは機能を提供する側が持つものです。
とあるSnapがもつプラグを別のSnapが持つスロットに接続すれば、プラグ側のSnapは接続されたインターフェースを通じて、スロット側のSnapが提供する機能を利用できます。
インターフェースとアクセス制限
システムで定義されているインターフェースだけでも、以下のように数多くのインターフェースがあります。インターフェースを接続して初めてその機能を利用できるようになるということは、言い換えれば、インターフェースを切断しておけばその機能に対してアクセス制限をかけることが可能であるということです。
例えばSnapアプリがPCに搭載されているカメラへアクセスするには、「camera」インターフェースを接続する必要があります。
Snapアプリにカメラにアクセスして欲しくなければ、「camera」インターフェースを切断しておけば良いということになります。
デスクトップアプリに必要なインターフェース
システムで定義されているインターフェースの中に、デスクトップアプリに必要なインターフェースが定義されています。例えば「x11」や「wayland」インターフェースは、デスクトップアプリに必要なインターフェースです。
これらのインターフェースは文字通りのインターフェースであり、デスクトップアプリが動作するのに必須のインターフェースです。
例えばSnapで提供されるデスクトップアプリを「x11」インターフェースから切断すると、そのデスクトップアプリはXサーバーにアクセスできなくなります。
またデスクトップアプリにとって重要なインターフェースがもう一つあります。
それが「desktop」インターフェースです。
このインターフェースはフォントやインジケーターなど、デスクトップの構成要素にアクセスするためのインターフェースです。
誰がスロットを提供するのか
さてデスクトップアプリが動作するのに必要なインターフェースにおいてプラグを持つのはデスクトップアプリ側のSnapですが、では誰がその接続先となるスロットを提供するのでしょうか。「Ubuntu Core Desktop」においてそれらのスロットを提供するのが「Ubuntu Desktop Session」であり、「Desktop Session」が持つ役割の一つになっています。
例えば「Snap版Firefox」が「Ubuntu Core Desktop」上で動作する場合、「Snap版Firefox」のプラグは以下のように「Ubuntu Desktop Session」が提供するスロットと接続され、インターフェースを確立します。
Interface Plug Slot Notes
audio-playback firefox:audio-playback ubuntu-desktop-session:audio-playback -
audio-record firefox:audio-record ubuntu-desktop-session:audio-record -
desktop firefox:desktop ubuntu-desktop-session:desktop -
wayland firefox:wayland ubuntu-desktop-session:wayland -
x11 firefox:x11 ubuntu-desktop-session:x11 -
audio-playback firefox:audio-playback ubuntu-desktop-session:audio-playback -
audio-record firefox:audio-record ubuntu-desktop-session:audio-record -
desktop firefox:desktop ubuntu-desktop-session:desktop -
wayland firefox:wayland ubuntu-desktop-session:wayland -
x11 firefox:x11 ubuntu-desktop-session:x11 -
上記の例で「Snap版Firefox」は、「X11」と「Wayland」ディスプレイサーバーへのアクセス、サウンドの再生と録音機能へのアクセス、デスクトップ機能へのアクセスが許可されています。
他にも役割はたくさんある
「Desktop Session」には他にもまだまだ役割があります。例えば「Ubuntu Desktop Session」では以下のデスクトップサービスを自身の環境内で実行します。
- GNOME Shell
- Pipewire
- Wireplumber
- Pipewire Pulse
- Nautilus
- XDG Desktop Portal GNOME
- XDG Desktop Portal GTK
- IBus
- Colord