Como a montagem na GUI funciona "sob o capô"

12

ATUALIZAR

Corrija-me se estiver errado : Para trabalhar no meu computador, com uma distribuição GNU / Linux chamada Debian, conheço duas maneiras de inserir um comando, iniciar um aplicativo, abrir um arquivo, etc .:

  • uma interface de linha de comando onde insiro texto
  • uma interface gráfica do usuário [ GUI ]: uma interface que fornece "janelas", símbolos etc.

Há algo chamado "Gerenciador de Janelas". Enquanto uso o GNU / Linux, trabalho no sistema X-Window [tanto quanto sei].

insira a descrição da imagem aqui


Postagem original


Situação : desabilitei o automount /etc/fstabpara USB Sticks [por exemplo /dev/sdb1]. A montagem precisa ser root, ou pelo menos uma sudoentrada na linha de comando, mas não em um gerenciador de janelas (!) . Eu não quero dizer automount, quero dizer "clicar no símbolo" em um gerenciador de janelas abre o dispositivo na GUI sem nenhuma pergunta, onde na CLI é preciso ser root.

Pergunta : Como a montagem em uma GUI funciona "sob o capô"? Existe um configarquivo para gerenciadores de janelas em geral ou é preciso definir isso individualmente?

Eu entendo e uso o mountcomando, acho que entendo como ler e configurar /etc/fstabe sei onde procurar o que as entradas lá e em /etc/mtabsignificado.

erch
fonte
1
Além disso, os gerenciadores de janelas do AFAIK não são responsáveis ​​por isso; o importante é o (partes do) ambiente da área de trabalho rodando por baixo. por exemplo, eu uso o Awesome GNOME - GNOME usando o Awesome em vez do GNOME Shell - e discos automount. mas não o fariam se eu apenas usasse o Awesome. sinceramente, eu realmente não entendo sua recompensa - a resposta de @ slm parece bastante clara.
strugee
2
Nos primeiros dias, era o montador automático fazendo esses truques em segundo plano (com praticamente o mesmo comando de montagem que você usaria no root-cli). Agora, existem subprocessos próprios que se integram à GUI que fazem o trabalho. Veja a resposta do slm.
Nils
5
"Acho difícil acreditar que todos e cada um dos [vários gerenciadores de janelas] precisariam procurar uma maneira de resolver isso". -> Nunca é o gerenciador de janelas (WM) que faz isso. É o ambiente de desktop (DE). Quanto a todos eles terem que fazer isso sozinhos, bem, todos eles fazem muitas outras coisas por si mesmos também. Por escolha . Mas eles não precisam. O GNOME, por exemplo, possui uma licença GPL, portanto, qualquer outro DE GPL poderia usar apenas partes do GNOME, se assim o desejasse.
Goldilocks
2
@goldilocks que, por exemplo, Cinnamon e MATE fizeram.
strugee
2
@ strugee: O GNOME possui uma estreita relação histórica com o GTK (que era originalmente para o GIMP), e as libs de suporte de nível inferior ( glib ) que o GNU também mantém e acredito que proliferaram do GNOME e GTK. Eu acho que quase todo mundo faz graça, ele fornece muitas coisas fundamentais para uma GUI multitarefa e orientada a eventos "sob o capô" (apenas: não as partes gráficas reais). Eu acho que o GNOME é fundamentalmente glib + gtk + um gerenciador de windom + algumas aplicações.
Goldilocks

Respostas:

5

Esta é a minha compreensão da situação, mas não sou especialista, por isso é menos técnica do que as outras respostas. Isto é o que eu entendo depois de usar esses sistemas por muitos anos, não os estudei detalhadamente.

Existem três jogadores principais aqui e entre eles eles gerenciam as montarias:

  • FUSE: Este é o centro de tudo, conforme descrito em sua página da Wikipedia :

    O sistema de arquivos no espaço de usuário (FUSE) é um mecanismo de sistema operacional para sistemas operacionais de computador tipo Unix que permite que usuários não privilegiados criem seus próprios sistemas de arquivos sem editar o código do kernel. Isso é conseguido executando o código do sistema de arquivos no espaço do usuário, enquanto o módulo FUSE fornece apenas uma "ponte" para as interfaces reais do kernel.

    Então, basicamente, é isso que permite que usuários sem privilégios montem sistemas de arquivos.

  • gvfs: Na família de ambientes de desktop Gnome (que inclui Gnome, Mate, Cinnamon), este é (entre outras coisas) um daemon que montará automaticamente unidades recém-conectadas. Faz isso via FUSE. Acredito (mas pode estar errado) que o equivalente para a família KDE se chama KIO

    Os principais processos de gvfssão (retirados de man gvfs):

    • gvfsd - o principal daemon gvfs
    • gvfs-fuse-daemon - monta o gvfs como um sistema de arquivos fusível
    • gvfsd-metadata - escreve metadados gvfs
  • udev: Este é um sistema que detecta novos dispositivos e permite executar scripts / comandos quando eles estão conectados. Por exemplo, é isso udevque detecta uma nova tela e pode espelhar sua área de trabalho nela:

    O udev é um gerenciador de dispositivos para o kernel do Linux. Principalmente, ele gerencia nós de dispositivos em / dev. É o sucessor do devfs e hotplug, o que significa que ele lida com o diretório / dev e todas as ações do espaço do usuário ao adicionar / remover dispositivos, incluindo carga de firmware.

    Especificamente, gvfsparece funcionar através do gvfs-udisks2-volume-monitorqual é um monitor de volume baseado em udisks. udisksem si, no entanto, depende udev(ver man 7 udisks).

Então, basicamente (leia "horrível simplificação"), o que acontece é que, quando você conecta sua unidade, a udevdetecta e alerta o gvfsdaemon que a montará como um dispositivo FUSE.

FUSE e udevserá o mesmo para todos os ambientes de desktop, o que muda é o daemon DE que monitora udeve monta a unidade como um sistema de arquivos FUSE.

terdon
fonte
1
Coloque o D-bus preenchendo as lacunas entre udev, gvfs e tudo mais.
Braiam
Você pode atualizar as informações sobre gvfs. Eles estão se mudando para o GIO.
Braiam
8

Depende do seu ambiente de janela (GNOME / KDE / etc.), Mas no GNOME, por exemplo, você verá daemons em execução chamados gvfs-*-volume-monitor,. Esses daemons são responsáveis ​​pela montagem dos dispositivos ao executar o ambiente da área de trabalho, não têm nada a ver /etc/fstabe operam de forma totalmente independente.

Quanto a um arquivo de configuração, existem alguns arquivos relacionados a isso que residem no diretório inicial do usuário que está executando o DE $HOME/.local/share/gvfs-metadata,.

Esta seção de perguntas e respostas da U&L intitulada: O que é gvfs e por que devo desejá-la no meu sistema? , tenta explicar o que é GVFS. Faz um bom trabalho de explicá-lo. Mas acho que o que você realmente está perguntando é abordado mais nesta seção de perguntas e respostas da U&L intitulada: Montando discos USB automaticamente (como funciona) .

slm
fonte
A resposta parece estar na HAL… Encontrei algumas soluções para thunar[as quais uso] etc. O artigo apontou em uma direção - obrigado por isso! - mas ainda estou procurando um denominador comum ...
erch 14/11
IIRC, o DE não precisa de raiz porque usa o FUSE (Sistema de Arquivos no Espaço do Usuário).
strugee
@ Strugee adivinhando que DE significa ambiente de desktop, eu deveria procurar no FUSE. Você tem uma dica, onde?
erch
@chirp procure FUSE na Wikipedia: en.wikipedia.org/wiki/FUSE, IIRC. e slm já respondeu. a resposta é que o ambiente da área de trabalho, não o gerenciador de janelas, realiza a montagem automática.
strugee
2
@chirp - Veja aqui: bbs.archlinux.org/viewtopic.php?id=95509 . O HAL foi descontinuado, en.wikipedia.org/wiki/HAL_(software) . O UDEV é o substituto daqui para frente: en.wikipedia.org/wiki/Udev
slm
8

A resposta simples é que eles trapaceiam. Eles não usam o fstab. Eles geralmente usam um udevgancho para capturar eventos de inserção, montar o disco manualmente como root, que pode ser passado dbuspara notificar seu gerenciador de arquivos de que você possui um novo disco ou eles podem usar suidutilitários em vez de dbusdesmontar. Infelizmente, não há opções de configuração padrão para isso, e como o movimento da área de trabalho acredita em ocultar a complexidade, eles não documentam isso na documentação do usuário, apenas na documentação do desenvolvedor, e assumem um sistema de usuário único, para que as unidades USB funcionem apenas para o primeiro usuário a efetuar login em um servidor X.

hildred
fonte
SIM! É mais o que estou procurando. Como novidade, eu gostaria de perguntar por onde começar a procurar, erm: "Por onde começo" para rastrear esse comportamento [qualquer dica poderia me ajudar a ser desviado; um ponto de partida ou assim ajudaria imensamente]
erch
2
@chirp para começar a explorar o visual do udev (7) e do
/etc/udev/rules.d/* #
5

O PolicyKit (ou Polkit) é um kit de ferramentas no nível do aplicativo para definir e manipular a política que permite que processos não privilegiados falem com processos privilegiados .

É uma estrutura para centralizar o processo de tomada de decisão com relação à concessão de acesso a operações privilegiadas (como chamar o método Mount ()) para aplicativos não privilegiados (desktop).

Um agente de autenticação é usado para fazer o usuário de uma sessão provar que realmente é o usuário (autenticando como usuário) ou um usuário administrativo (autenticando como administrador).

O GVFS é um sistema de arquivos virtual que permite a montagem de sistemas de arquivos locais e remotos como usuário, juntamente com o suporte ao lixo. Também há suporte ao FUSE que permite que aplicativos que não usam o GIO acessem os sistemas de arquivos GVFS, mas a maioria dos DEs também faz autenticação via Policykit para outras coisas, como hibernar e desligar o computador, e para o NetworkManager, para que não precisem use FUSE.

Consiste em duas partes:

  1. Uma biblioteca compartilhada, carregada por aplicativos que suportam GIO;
  2. O próprio GVFS, que contém uma coleção de daemons que se comunicam entre si e com o módulo GIO pelo D-Bus.

O pacote gvfs precisa ser instalado, juntamente com o polkit-gnome para as regras do polkit. Verifique se um agente de autenticação gráfica foi instalado e iniciado automaticamente.

Os arquivos de configuração para gerenciar privilégios devem ser diferentes para cada distribuição. O Arch Wiki diz para você criar um arquivo em /usr/share/polkit-1/rules.d/. No Debian, eles estão localizados em /etc/polkit-1/.

Fontes: Policykit on Debian || Polkit no Arch Wiki || GVFS no Arch Wiki || GVFS no GNOME Wiki!

Teresa e Junior
fonte
Você tem certeza de que GIO significa GObject Introspection? Eu teria pensado que seria chamado GOI se assim fosse. O povo gnomo parece chamá-lo de IG . Não encontrei outra explicação do nome do GIO, mas ele não parece ser o mesmo que GI.
terdon
@terdon Na verdade, foi uma edição feita por strugee (revisão 10 em unix.stackexchange.com/posts/101951/revisions ). Removendo ...
Teresa e Junior
4

Um elemento comum que você está procurando é o FUSE , o gvfs do GNOME, por exemplo, o usa sob o capô. 1 Essa é a interface com o kernel, e acredito que seja comum a todos os sistemas de montagem não-privilegiados (automáticos) no linux [mas veja os comentários]. DEs individuais não criariam sua própria versão disso, pois isso exigiria o patch do kernel.

Esse link da página inicial está de fato desatualizado, porque, como observado aqui , o FUSE se tornou parte do kernel oficial há alguns anos, mas descreve as origens e os objetivos do projeto (não é apenas para montagem sem privilégios).

A razão pela qual vários sistemas podem divergir de estilo além disso é o mesmo motivo pelo qual você tem vários ambientes de área de trabalho: eles representam visões diferentes de como / qual deve ser a GUI. Eles estão cuidando da forma e função da interface do usuário, mas o FUSE faz as coisas reais de montagem e no nível do kernel. Note que o FUSE realmente não faz a parte "auto", trata-se mais da parte "não privilegiada", mas a parte automática é bem simples: tudo o que você precisa fazer é pesquisar, por exemplo /dev,. Eu escrevi um aplicativo de montagem que funciona dessa maneira; apenas observa o aparecimento de novos nós. 2 Essa parte é talvez uma centena de linhas de C ++. Fácil - não há necessidade real de uma API comum nesse nível.

1 Ou pode, se estiver fazendo uma montagem verdadeiramente sem privilégios. A resposta de Teresa pode abranger abordagens mais recentes para permitir o acesso a montarias normais.

2 Como observa hildred, os retornos de chamada do udev seriam um método melhor e menos invasivo.

Cachinhos Dourados
fonte
Acho que você quis dizer "página inicial" e vou excluir esse comentário após o erro de digitação desaparecer;) Ótima resposta, como sempre, a propósito!
erch
1
Como nossas respostas parecem se contradizer, fiz alguns testes. Pelo menos no Debian, sem um agente Polkit ativo, o usuário não pode montar. Além disso, o módulo fuse.ko não é carregado mesmo depois da montagem. (Estou usando Thunar em Wheezy)
Teresa e Junior
3
@TeresaeJunior: Point (eu adicionei uma referência aqui), embora eu não ache que haja uma contradição, pois a rota polkit é um truque do espaço do usuário - a montagem ainda é uma montagem com privilégios. A página da wikipedia do GVFS observa "O GVFS pode usar o FUSE", então farei isso "may" em vez de "does".
Goldilocks
1
No GNOME Wiki: "Também há suporte a fusíveis que permite que aplicativos que não usam o gio acessem os sistemas de arquivos gvfs."
Teresa e Junior
1
@TeresaeJunior: Sim, então eles são meio concorrentes, o FUSE é um substituto. Obviamente, o GNOME não é o único DE existente, mas tenho certeza que a maioria dos outros usa o glib (que inclui gio) de várias maneiras. TBH: Eu nunca gostei de montagem automática, então não tenho nenhuma história sobre isso. Enfim, o FUSE é uma possibilidade.
Goldilocks