Como a montagem na GUI funciona “sob o capô”?

11

UPDATE

Por favor corrija-me se estiver errado : Para trabalhar no meu computador, com uma distribuição GNU / Linux chamada Debian, eu sei dois maneiras de inserir um comando, iniciar um aplicativo, abrir um arquivo, etc.:

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

Existe algo que passa pelo nome "Gerenciador de Janelas". Como eu uso o GNU / Linux, eu trabalho no X-Window System [tanto quanto eu sei].

Publicaçãooriginal

Situação:desativeioautomountem/etc/fstabparaUSBSticks[porexemplo,%código%].Amontagemprecisaser/dev/sdb1,oupelomenosumrootentrynalinhadecomando,masnãoemumgerenciadordejanelas(!).Eunãoquerodizersudo,querodizer"clicar no símbolo" em um gerenciador de janelas abre o dispositivo na GUI sem qualquer dúvida, onde na CLI um deve ser root.

Pergunta : Como a montagem em uma GUI funciona "sob o capô"? Existe um arquivo automount para gerenciadores de janela em geral ou alguém tem que configurar isso individualmente?

Eu entendo e uso o comando config , acho que entendo como ler e configurar o mount e saber onde procurar as entradas e /etc/fstab .

    
por erch 13.11.2013 / 20:50

5 respostas

4

Este é o meu entendimento da situação, mas não sou especialista, por isso é menos técnico do que as outras respostas. Isso é o que eu entendo depois de usar esses sistemas por muitos anos, eu não os estudei em detalhes.

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

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

    Filesystem in Userspace (FUSE) is an operating system mechanism for Unix-like computer operating systems that lets non-privileged users create their own file systems without editing kernel code. This is achieved by running file system code in user space while the FUSE module provides only a "bridge" to the actual kernel interfaces.

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

  • gvfs : Na família Gnome de ambientes de desktop (que inclui Gnome, Mate, Cinnamon), este é (entre outras coisas) um daemon que montará automaticamente drives recém-conectados. Ele faz isso via FUSE. Eu acredito (mas pode muito bem estar errado) o equivalente para a família KDE é chamado de KIO

    Os principais processos de gvfs são (tirados de man gvfs ):

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

    udev is a device manager for the Linux kernel. Primarily, it manages device nodes in /dev. It is the successor of devfs and hotplug, which means that it handles the /dev directory and all user space actions when adding/removing devices, including firmware load.

    Especificamente, gvfs parece funcionar através de gvfs-udisks2-volume-monitor , que é um monitor de volume baseado em udisks. udisks no entanto, depende de udev (consulte man 7 udisks ).

Então, basicamente (leia-se "simplificação horrível"), quando você conecta sua unidade, udev detecta e alerta o daemon gvfs , que o montará como um dispositivo FUSE.

FUSE e udev serão os mesmos para todos os ambientes de área de trabalho, o que muda é o daemon DE que monitora udev e monta a unidade como um sistema de arquivos FUSE.

    
por 20.11.2013 / 19:52
7

Depende do seu ambiente de janelas (GNOME / KDE / etc.), mas no GNOME, por exemplo, você verá os daemons executando, gvfs-*-volume-monitor . Esses daemons são responsáveis por montar dispositivos ao executar o ambiente de desktop, eles não têm nada a ver com /etc/fstab e operam de forma totalmente independente.

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

Este U & Q e amp; A intitulado: O que é gvfs e por que eu deveria querer isso no meu sistema? , tenta explicar o que é o GVFS. Ele faz um bom trabalho de explicá-lo. Mas eu acho que o que você está realmente perguntando é abordado mais por este U & L Q & A intitulado: Montando discos USB automaticamente (como funciona) .

    
por 13.11.2013 / 21:01
6

A resposta simples é que eles trapaceiam. Eles não usam o fstab . Eles geralmente usam um gancho udev para capturar eventos de inserção, montam o disco manualmente como root , que pode ser passado para dbus para notificar o gerenciador de arquivos que você tem um novo disco ou eles podem usar suid utilitários de dbus para desmontagem. 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 único sistema de usuário. primeiro usuário a efetuar login em um servidor X.

    
por 19.11.2013 / 02:26
4

O PolicyKit (ou Polkit) é um kit de ferramentas em nível de aplicativo para definir e manipular a política que permite que processos sem privilégios 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 (desktop) não privilegiados.

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

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

Consiste em duas partes:

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

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

Os arquivos de configuração para gerenciar privilégios devem ser diferentes para cada distribuição. O Wiki do Arch 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 no Debian || Wiki do Polkit on Arch || GVFS no Arch Wiki || GVFS no GNOME Wiki!

    
por 20.11.2013 / 16:53
3

Um elemento comum que você está procurando é FUSE , gvfs do GNOME, por exemplo, usa isso sob o hood. 1 Esta é a interface com o kernel, e acredito que seja comum a todos os sistemas de montagem unprivileged (auto) no linux [mas veja os comentários]. Os DEs individuais não criariam sua própria versão, pois isso exigiria a correção do kernel.

Esse link da página inicial está desatualizado, porque conforme mencionado aqui , o FUSE tornou-se parte do kernel oficial alguns anos atrás atrás, mas descreve as origens e propósitos do projeto (não é apenas para montagem sem privilégios).

A razão pela qual vários sistemas podem se desviar em grande estilo além disso é a mesma razão pela qual você tem vários ambientes de área de trabalho: eles representam diferentes visões de como / o que a GUI deve ser. Eles estão cuidando da forma e da função da interface do usuário, mas o FUSE faz a montagem real e as coisas no nível do kernel. Observe que o FUSE não faz a parte "automática", trata-se mais da parte "sem privilégios", 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; ele apenas observa o aparecimento de novos nós. 2 Essa parte é talvez uma centena de linhas ou mais de C ++. Easy-peasy - não há necessidade real de uma API comum nesse nível.

1 Ou pode, se estiver fazendo uma montagem realmente sem privilégios. A resposta de Teresa pode abranger abordagens mais recentes para permitir acessos a montagens normais.

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

    
por 20.11.2013 / 18:03