web-dev-qa-db-ja.com

GUIへのマウントは「内部」でどのように機能しますか

更新

間違っている場合は訂正してください:Debianという名前のGNU/Linuxディストリビューションを使用してコンピューターで作業する場合、コマンドを入力する、アプリケーションを起動する、ファイルを開くなどの2つの方法を知っています。 :

  • a コマンドラインインターフェイステキストを入力する場所
  • a グラフィカルユーザーインターフェイス [aka[〜#〜] gui [〜#〜]]:「ウィンドウ」を提供するインターフェイス"、記号など。

「ウィンドウマネージャ」という名前で何かが起こっています。私はGNU/Linuxを使用しているので、X-Window System [私が知る限り]で作業します。

enter image description here


元の投稿


状況:USBスティックの/etc/fstabで自動マウントを無効にしました[例: /dev/sdb1]。マウントには、root、または少なくともSudoエントリが必要ですコマンドラインではありますが、ウィンドウマネージャー(!)ではありませんautomountを意味するのではなく、ウィンドウマネージャーで「シンボルをクリックする」とは、GUIでデバイスを問題なく開くことを意味します。CLIではrootである必要があります。

質問:GUIへのマウントは「内部」でどのように機能しますか?一般的なウィンドウマネージャー用のconfigfileはありますか、それとも個別に設定する必要がありますか?

私はmountコマンドを理解して使用しています。私は、/etc/fstabを読み取って構成する方法を理解し、そこと/etc/mtabmeanのエントリをどこで確認するかを知っていると思います。

12
erch

これは私の状況の理解ですが、私は専門家ではないため、他の回答よりも技術的ではありません。これは私が長年これらのシステムを使用した後に私が理解していることであり、私はそれらを詳細に研究していません。

ここには3人の主要なプレーヤーがいて、それらの間でマウントを管理しています。

  • ヒューズ: ウィキペディアのページ :で説明されているように、これはすべての中心にあります。

    Filesystem in Userspace(Fuse)は、Unixライクなコンピューターオペレーティングシステム用のオペレーティングシステムメカニズムであり、非特権ユーザーがカーネルコードを編集せずに独自のファイルシステムを作成できるようにします。これは、ユーザースペースでファイルシステムコードを実行することで実現されますが、Fuseモジュールは実際のカーネルインターフェイスへの「ブリッジ」のみを提供します。

    したがって、基本的に、これにより、特権のないユーザーがファイルシステムをマウントできるようになります。

  • gvfs:デスクトップ環境のGnomeファミリー(Gnome、Mate、Cinnamonを含む)では、これは(とりわけ)新しく接続されたドライブを自動的にマウントするデーモンです。 viaヒューズを使用します。 KDEファミリーに相当するものは [〜#〜] kio [〜#〜] と呼ばれていると思います(しかし間違っているかもしれません)

    gvfsの主なプロセスは次のとおりです(man gvfsから取得):

    • gvfsd-メインのgvfsデーモン
    • gvfs-Fuse-daemon-gvfsをFuseファイルシステムとしてマウントします
    • gvfsd-metadata-gvfsメタデータを書き込みます
  • udev :これは、新しいデバイスを検出し、それらが接続されたときにスクリプト/コマンドを実行できるようにするシステムです。たとえば、新しい画面を検出してデスクトップをミラーリングできるのはudevです。

    udevは、Linuxカーネルのデバイスマネージャーです。主に、/ dev内のデバイスノードを管理します。これはdevfsとhotplugの後継であり、ファームウェアのロードを含むデバイスの追加/削除時に/ devディレクトリとすべてのユーザースペースアクションを処理することを意味します。

    具体的には、gvfsはudisksベースのボリュームモニターであるgvfs-udisks2-volume-monitorを介して機能するようです。ただし、udisks自体はudevに依存しています(man 7 udisksを参照)。

したがって、基本的に(「恐ろしい単純化」を読んでください)、ドライブを接続すると、udevがそれを検出し、gvfsデーモンに警告します。

Fuseとudevはすべてのデスクトップ環境で同じです。変更点は、udevを監視し、ドライブをFuseファイルシステムとしてマウントするDEデーモンです。

5
terdon

簡単な答えは彼らがごまかすことです。 fstabは使用しません。通常、挿入イベントをキャッチするためにudevフックを使用し、ディスクをrootとして手動でマウントします。これは、dbusに渡されて、新しいディスクがあることをファイルマネージャーに通知します。または、アンマウントにsuidの代わりにdbusユーティリティを使用する場合もあります。残念ながら、これには標準の構成オプションはありません。デスクトップムーブメントは複雑さを隠すことを信じているため、ユーザードキュメントではなく、開発者ドキュメントでのみこれを文書化し、単一のユーザーシステムを想定しているため、USBドライブはXサーバーにログインする最初のユーザー。

8
hildred

ウィンドウ環境(GNOME/KDEなど)によって異なりますが、たとえばGNOMEでは、gvfs-*-volume-monitorという名前のデーモンが実行されています。これらのデーモンは、デスクトップ環境を実行するときにデバイスをマウントする役割を果たし、/etc/fstabとは関係がなく、完全に独立して動作します。

設定ファイルに関しては、DEを実行しているユーザーのホームディレクトリ$HOME/.local/share/gvfs-metadataにあるこれに関連するファイルがいくつかあります。

このU&L Q&Aのタイトルは次のとおりです。 gvfsとは何ですか、なぜシステムに必要なのですか? 、GVFSとは何かを説明しようとします。それを説明するのはOKの仕事です。しかし、あなたが本当に求めていることは、このU&L Q&Aというタイトルの方がより多く取り上げられていると思います: SBディスクの自動マウント(仕組み)

8
slm

PolicyKit(またはPolkit)は、非特権プロセスが話すことを許可するポリシーを定義および処理するためのアプリケーションレベルのツールキットです特権プロセスへ

これは、非特権(デスクトップ)アプリケーションの特権操作(Mount()メソッドの呼び出しなど)へのアクセスを許可することに関する意思決定プロセスを一元化するためのフレームワークです。

認証エージェントは、セッションのユーザーに、セッションのユーザーが実際にユーザー(ユーザーとして認証することによる)または管理ユーザー(管理者として認証することによる)であることを証明させるために使用されます。

[〜#〜] gvfs [〜#〜]は仮想ファイルシステムであり、ローカルおよびリモートファイルシステムを次のようにマウントできます。ユーザーとゴミ箱のサポート。 GIOを使用しないアプリケーションがGVFSファイルシステムにアクセスできるようにするFuseサポートもありますが、ほとんどのDEは、コンピューターの休止やシャットダウンなどの他の目的やNetworkManagerに対しても、Policykitを介して認証を行うため、その必要はありません。ヒューズを使用します。

これは2つの部分で構成されています。

  1. GIOをサポートするアプリケーションによってロードされる共有ライブラリ。
  2. GVFS自体。これには、D-Busを介して相互に通信するデーモンのコレクションとGIOモジュールが含まれます。

Gvfsパッケージは、polkitルールのpolkit-gnomeとともにインストールする必要があります。グラフィカル認証エージェントがインストールされ、自動起動されていることを確認してください。

特権を管理するための構成ファイルは、ディストリビューションごとに異なる必要があります。 Arch Wikiは、/usr/share/polkit-1/rules.d/の下にファイルを作成するように指示しています。 Debianでは、それらは/etc/polkit-1/にあります。

出典: DebianのPolicykit || Arch WikiのPolkit || Arch WikiのGVFS || GNOME WikiのGVFS!

5
Teresa e Junior

あなたが探している一般的な要素の1つは ヒューズGNOMEのgvfsは、たとえば、内部でそれを使用します。1 これはカーネルとのインターフェースであり、Linux上のすべての非特権(自動)マウントシステムに共通していると思います[ただしコメントを参照]。カーネルのパッチが必要になるため、個々のDEは独自のバージョンを作成しません。

ここに記載されているように 、Fuseは数年前に公式カーネルの一部になったため、そのホームページのリンクは実際には古くなっていますが、プロジェクトの起源と目的を説明しています(特権のない人だけのものではありません)取り付け)。

さまざまなシステムがこれを超えてスタイルを逸脱する可能性がある理由は、さまざまなデスクトップ環境があるのと同じ理由です。それらは、GUIがどのように/何であるかについてのさまざまなビジョンを表しています。彼らはユーザーインターフェースの形式と機能を処理していますが、Fuseは実際のマウントとカーネルレベルの処理を行います。 Fuseは実際には「自動」部分を実行しないことに注意してください。これは「非特権」部分に関するものですが、自動部分は非常に単純です。必要なのはポーリングだけです。たとえば、/dev。このように機能するマウントアプリケーションを作成しました。新しいノードの出現を監視するだけです。2 その部分はおそらく100行ほどのC++です。 Easy-peasy-そのレベルの共通APIは実際には必要ありません。

1または、本当に特権のないマウントを実行している場合は可能です。テレサの答えは、通常のマウントへのアクセスを許可するための新しいアプローチをカバーしている可能性があります。

2Hildredが観察しているように、udevコールバックは、より優れた、ハッキングの少ない方法です。

4
goldilocks