GUI에 장착하는 방법은 "후드"에서 어떻게 작동합니까?


12

최신 정보

틀린 경우 수정하십시오 : Debian이라는 GNU / Linux 배포판을 사용하여 컴퓨터에서 작업하는 경우 명령을 입력하고 응용 프로그램을 시작하고 파일을 여는 등 두 가지 방법을 알고 있습니다.

  • 텍스트를 입력 하는 명령 줄 인터페이스
  • 그래픽 사용자 인터페이스 [일명 GUI ] : "창"을 제공하는 인터페이스, 문자 등

"창 관리자"라는 이름으로 뭔가가 있습니다. GNU / Linux를 사용하면서 X-Window System 에서 작업하고 있습니다.

여기에 이미지 설명을 입력하십시오


원본 게시


상황 : /etc/fstabUSB 스틱 [예 : /dev/sdb1] 에 대해 자동 마운트를 비활성화했습니다 . 마운트는 창 관리자 (!)가 아닌root 최소한 명령 줄에sudo 입력 해야합니다 . 나는 automount윈도우 매니저에서 "심볼을 클릭"한다는 것은 아무런 질문없이 GUI에서 디바이스를 연다는 것을 의미하지 않는다.

질문 : GUI의 마운트는 "후드"에서 어떻게 작동합니까? 거기 config에 윈도우 관리자를위한 파일은 일반적으로 또는 하나 개별적으로 설정해야합니까?

나는 mount명령을 이해하고 사용 하며, 읽고 구성하는 방법을 이해 /etc/fstab하고 항목의 /etc/mtab의미 와 의미를 어디에서 볼 수 있는지 알고 싶습니다 .


1
또한 AFAIK 창 관리자 이에 대해 책임을지지 않습니다 . 중요한 것은 아래에서 실행되는 데스크톱 환경입니다. 예를 들어, 그놈 쉘 대신 Awesome을 사용하는 Awesome GNOME-GNOME을 사용하고 디스크는 자동 마운트합니다. 그러나 나는 단지 평범한 최고를 사용한다면 그렇지 않을 것입니다. 솔직히, 나는 당신의 현상금을 정말로 이해하지 못합니다-@slm의 대답은 꽤 분명합니다.
strugee

2
초기에는 오토 마운터가 백그라운드에서 이러한 트릭을 수행했습니다 (root-cli에서 사용하는 것과 거의 동일한 마운트 명령 사용). 이제 작업을 수행하는 GUI와 통합되는 자체 하위 프로세스가 있습니다. slm의 답변을 참조하십시오.
Nils

5
"[각각의 창 관리자] 각자가이 문제를 해결하기 위해 자신의 길을 찾아야한다고 믿기가 어렵습니다." ->이를 수행 하는 창 관리자 (WM) 는 결코 아닙니다 . 그것은이다 데스크탑 환경 (DE). 그들 모두 스스로해야하는 것에 관해서는, 그들 모두도 스스로 다른 많은 일을합니다. 선택하여 . 그러나 그들은 필요하지 않습니다. 예를 들어 그놈에는 GPL 라이센스가 있으므로 다른 GPL의 DE는 원하는 경우 그놈 부품 만 사용할 수 있습니다.
goldilocks

2
@ goldilocks 예 : 계피와 MATE.
strugee

2
@strugee : GNOME은 GTK (원래는 김프 용)와 밀접한 역사적 관계를 가지고 있으며 GNU가 유지 관리 하는 하위 레벨 지원 라이브러리 ( glib )도 그놈과 GTK에서 확산 된 것으로 생각합니다. 나는 거의 모든 사람들이 glib를 만든다고 생각한다. 그것은 멀티 태스킹, 이벤트 중심 GUI "실제로"(실제 그래픽 부분이 아님)에 기본적으로 많은 것들을 제공한다. 그놈은 기본적으로 glib + gtk + windom manager + 일부 응용 프로그램이라고 생각합니다.
goldilocks

답변:


5

이것은 상황에 대한 나의 이해이지만, 나는 전문가가 아니기 때문에 다른 답변보다 기술적이지 않습니다. 이것이 수년간이 시스템을 사용한 후에 이해 한 것이므로 자세히 연구하지는 않았습니다.

여기에는 세 가지 주요 플레이어가 있으며 그 사이에는 마운트를 관리합니다.

  • 퓨즈 : 위키 백과 페이지에 설명 된 바와 같이 모든 것의 중심에 있습니다 .

    FUSE (Filesystem in Userspace)는 권한이없는 사용자가 커널 코드를 편집하지 않고 자신의 파일 시스템을 만들 수 있도록하는 Unix와 유사한 컴퓨터 운영 체제의 운영 체제 메커니즘입니다. FUSE 모듈은 실제 커널 인터페이스에 "브릿지"만 제공하는 반면 사용자 공간에서 파일 시스템 코드를 실행하면됩니다.

    따라서 기본적으로 권한이없는 사용자가 파일 시스템을 마운트 할 수 있습니다.

  • gvfs: Gnome 데스크탑 환경 (Gnome, Mate, Cinnamon 포함)에서 새로 연결된 드라이브를 자동으로 마운트하는 데몬입니다. FUSE 를 통해 그렇게 합니다. KDE 제품군에 해당하는 것을 KIO 라고 믿습니다 (그러나 잘못되었을 수도 있음).

    의 주요 프로세스는 다음 gvfsman gvfs같습니다.

    • gvfsd-기본 gvfs 데몬
    • gvfs-fuse-daemon-gvfs를 퓨즈 파일 시스템으로 마운트
    • gvfsd-metadata-gvfs 메타 데이터를 씁니다.
  • udev: 새 장치를 감지하고 연결시 스크립트 / 명령을 실행할 수있는 시스템입니다. 예를 들어 udev새 화면을 감지하여 바탕 화면을 미러링 할 수 있습니다.

    udev는 Linux 커널의 장치 관리자입니다. 기본적으로 / dev에서 장치 노드를 관리합니다. devfs와 hotplug의 후속 버전이므로 펌웨어로드를 포함하여 장치를 추가 / 제거 할 때 / dev 디렉토리와 모든 사용자 공간 작업을 처리합니다.

    특히, udisk 기반 볼륨 모니터가 gvfs작동 gvfs-udisks2-volume-monitor하는 것 같습니다 . udisks그러나 그 자체에 의존합니다 udev(참조 man 7 udisks).

따라서 기본적으로 ( "끔찍한 단순화"읽기) 드라이브를 연결 udev하면 드라이브를 감지하고 gvfs데몬에 경고하여 FUSE 장치로 마운트합니다.

FUSE udev는 모든 데스크탑 환경에서 동일하며 udev, 드라이브를 FUSE 파일 시스템으로 모니터링 하고 마운트하는 DE 데몬이 변경 되었습니다.


1
udev, gvfs 및 기타 모든 것의 간격을 채우는 D- 버스를 넣으십시오.
브라이 암

gvfs에 대한 정보를 업데이트 할 수 있습니다. 그들은 GIO로 이사하고 있습니다.
Braiam

8

창 환경 (GNOME / KDE / etc.)에 따라 다르지만 예를 들어 그놈에서는 데몬이 실행되는 것을 볼 수 있습니다 gvfs-*-volume-monitor. 이 데몬은 데스크탑 환경을 실행할 때 장치를 마운트하는 역할을하며 /etc/fstab, 관련이 없으며 완전히 독립적으로 작동합니다.

구성 파일까지는 DE, 실행중인 사용자의 홈 디렉토리에있는 파일과 관련된 파일이 있습니다 $HOME/.local/share/gvfs-metadata.

이 U & L Q & A : gvfs 란 무엇이며 왜 내 시스템에서 원하는가요? , GVFS가 무엇인지 설명하려고 시도합니다. 그것을 설명하는 OK 일을합니다. 그러나 당신이 정말로 요구하는 것은 USB 디스크 자동 마운트 (작동 방식) 라는 제목의 U & L Q & A에 의해 더 많이 해결 된다고 생각합니다 .


그 대답은 다음과 같습니다. HALthunar[내가 사용하는] 등에 대한 해결책을 찾았습니다 .이 기사는 방향을 지적했습니다. 감사합니다! -그러나 나는 아직도 일반적인 분모를 찾고 있습니다…
erch

IIRC DE는 FUSE (사용자 공간의 파일 시스템)를 사용하므로 루트가 필요하지 않습니다.
strugee

@strugee DE가 데스크탑 환경을 의미한다고 생각하면 FUSE에서 찾아야합니다. 어디 힌트가 있습니까?
erch

@chirp는 Wikipedia에서 FUSE를 찾습니다 : en.wikipedia.org/wiki/FUSE는 IIRC입니다. 그리고 slm은 이미 답변했습니다. 답은 창 관리자가 아닌 데스크탑 환경이 자동 마운팅을 수행한다는 것입니다.
strugee

2
@chirp - 여기를 참조하십시오 : bbs.archlinux.org/viewtopic.php?id=95509를 . HAL은 더 이상 사용되지 않습니다 ( en.wikipedia.org/wiki/HAL_(software)) . UDEV는 다음 교체품입니다. en.wikipedia.org/wiki/Udev
slm

8

간단한 대답은 그들이 속이는 것입니다. 그들은을 사용하지 않습니다 fstab. 일반적으로 udev후크를 사용하여 삽입 이벤트를 포착하고로 디스크를 수동으로 마운트 합니다. 파일 관리자에게 새 디스크가 있거나 마운트 해제 대신 유틸리티를 사용할 root수 있음 dbus을 알리기 위해 전달 될 수 있습니다 . 불행히도 이에 대한 표준 구성 옵션이 없으며 데스크탑 이동이 복잡성을 숨기고 있기 때문에 사용자 설명서, 개발자 설명서에서만이를 문서화하지 않으며 단일 사용자 시스템을 가정하므로 USB 드라이브 만 작동합니다. X 서버에 처음 로그인 한 사용자suiddbus


예! 이것은 내가 찾고있는 것입니다. newb로서, 어디서부터 시작해야하는지 묻고 싶습니다. erm :이 행동을 추적하기 위해 "어디에서 시작합니까?" 출발점 정도가 큰 도움이 될 것입니다]
erch

2
@chirp은 udev에 (7)과 /etc/udev/rules.d/* 봐 탐험을 시작합니다
hildred

5

PolicyKit (또는 Polkit)은 권한이없는 프로세스가 권한있는 프로세스와 통신 할 수 있도록 하는 정책을 정의하고 처리하기위한 응용 프로그램 수준 툴킷입니다 .

권한이없는 (데스크톱) 응용 프로그램에 대한 권한있는 작업 (예 : Mount () 메서드 호출)에 대한 액세스 권한 부여와 관련하여 의사 결정 프로세스를 중앙 집중화하기위한 프레임 워크입니다.

인증 에이전트는 세션의 사용자가 세션의 사용자가 실제로 사용자 (사용자로 인증) 또는 관리 사용자 (관리자로 인증)임을 증명하는 데 사용됩니다.

GVFS 는 가상 파일 시스템으로 로컬 및 원격 파일 시스템 을 휴지통 지원과 함께 사용자로 마운트 할 수 있습니다 . 또한 GIO를 사용하지 않는 응용 프로그램이 GVFS 파일 시스템에 액세스 할 수 있도록하는 FUSE 지원이 있지만 대부분의 DE는 컴퓨터를 최대 절전 모드 및 종료 및 NetworkManager와 같은 다른 용도로 Policykit을 통해 인증을 수행하므로 필요하지 않습니다. 퓨즈를 사용하십시오.

두 부분으로 구성됩니다.

  1. GIO를 지원하는 응용 프로그램에 의해로드되는 공유 라이브러리.
  2. GVFS 자체에는 D-Bus를 통해 서로 통신하는 데몬과 GIO 모듈이 포함되어 있습니다.

polkit 규칙에 대한 polkit-gnome과 함께 gvfs 패키지를 설치해야합니다. 그래픽 인증 에이전트가 설치되고 자동 시작되었는지 확인하십시오.

권한 관리를위한 구성 파일은 각 배포마다 달라야합니다. 아치 위키는 아래에 파일을 만들도록 지시합니다 /usr/share/polkit-1/rules.d/. 데비안에서는에 있습니다 /etc/polkit-1/.

출처 : 데비안의 Policykit || 아치 위키에 Polkit || 아치 위키의 GVFS || 그놈 위키의 GVFS!


GIO가 GObject Introspection의 약자입니까? 그렇다면 GOI라고 생각했을 것입니다. 그놈 사람들은 그것을 GI 라고 부르는 것 같습니다 . GIO 이름에 대한 다른 설명을 찾지 못했지만 GI와 같지 않은 것 같습니다 .
terdon

@terdon 즉 strugee (에 개정 (10)에 의해 편집 실제로이었다 unix.stackexchange.com/posts/101951/revisions은 ). 그것을 제거 ...
Teresa e Junior

4

당신이 찾고있는 하나 개의 공통 요소는 FUSE , 예를 들어, 그놈의 GVFS, 후드 것을 사용합니다. 1 이것은 커널과의 인터페이스이며 Linux의 모든 권한이없는 (자동) 마운트 시스템에 공통적이라고 생각합니다 [그러나 주석을보십시오]. 개별 DE는 커널 패치가 필요하기 때문에 자체 버전을 만들지 않습니다.

여기서 언급했듯이 FUSE는 몇 년 전에 공식 커널의 일부가되었지만 프로젝트의 기원과 목적을 설명 하기 때문에 해당 홈페이지 링크는 실제로 구식 입니다.

다양한 시스템이이를 넘어서 스타일을 벗어나게하는 이유는 다양한 데스크탑 환경을 가지고있는 것과 같은 이유입니다. GUI가 어떻게 / 무엇인지에 대한 다른 비전을 나타냅니다. 이들은 사용자 인터페이스의 형태와 기능을 관리하지만 FUSE는 실제 마운팅 및 커널 수준의 작업을 수행합니다. FUSE는 실제로 "자동"부분을 수행하지 않으며 "권한이없는"부분에 대한 것이지만 자동 부분은 매우 간단합니다. 예를 들어 폴링 만하면 /dev됩니다. 이런 식으로 작동하는 탑재 응용 프로그램을 작성했습니다. 새로운 노드의 출현 만 감시합니다. 2 그 부분은 아마도 100 줄 정도의 C ++ 일 것입니다. 손쉬운-해당 수준에서 공통 API가 필요하지 않습니다.

1 또는 실제로 권한이없는 마운트를 수행하는 경우 가능합니다. Teresa의 답변은 일반 마운트에 대한 액세스를 허용하는 새로운 접근법을 다룰 수 있습니다.

2 hildred가 관찰했듯이 udev 콜백은 더 나은 해킹 방법이 아닙니다.


나는 당신이 "홈페이지"를 의미한다고 생각하고 오타가 사라진 후에이 코멘트를 삭제할 것입니다.
erch

1
우리의 답변이 서로 모순되는 것처럼 보이기 때문에 몇 가지 테스트를 수행했습니다. 최소한 데비안에서는 활성 Polkit 에이전트가 없으면 사용자는 마운트 할 수 없습니다. 또한 마운트 한 후에도 모듈 fuse.ko 가로 드되지 않습니다. (Wheezy에서 Thunar를 사용하고 있습니다)
Teresa e Junior

3
@TeresaeJunior : Point (여기에 참조를 추가했습니다.) 폴킷 경로가 약간의 사용자 공간 트릭이므로 모순이 없다고 생각합니다. 마운트는 여전히 privilleged 마운트입니다. GVFS 위키 백과 페이지에 "GVFS는 FUSE를 사용할 수 있습니다"라는 메모가 있으므로 "does"대신 "may"로 만들겠습니다.
goldilocks

1
그놈 위키에서 : "gio를 사용하지 않는 응용 프로그램이 gvfs 파일 시스템에 액세스 할 수 있도록하는 퓨즈 지원도 있습니다."
Teresa e Junior

1
@TeresaeJunior : 예, 그들은 일종의 동시 적입니다. FUSE는 폴백입니다. 물론 그놈 만이 DE 주변은 아니지만 대부분의 다른 사람들은 glib (gio 포함)를 다양한 방법으로 사용합니다. TBH 자동 마운트를 좋아 한 적이 없었으므로 이에 대한 일화가 없습니다. 어쨌든, 퓨즈는 가능성입니다.
goldilocks
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.