Cách gắn trên GUI hoạt động như thế nào dưới mui xe


12

CẬP NHẬT

Vui lòng sửa cho tôi nếu tôi sai : Để làm việc trên máy tính của tôi, với Phân phối GNU / Linux có tên Debian, tôi biết hai cách để nhập lệnh, khởi động ứng dụng, mở tệp, v.v.:

  • một Command Line Interface nơi tôi nhập văn bản
  • một Graphical User Interface [aka GUI ]: một giao diện mà cung cấp "cửa sổ", biểu tượng, vv

Có một cái gì đó đi theo tên "Trình quản lý cửa sổ". Khi tôi sử dụng GNU / Linux, tôi làm việc trên Hệ thống X-Window [theo như tôi biết].

nhập mô tả hình ảnh ở đây


Đăng bài gốc


Tình huống : Tôi đã vô hiệu hóa autoount in /etc/fstabcho USB Stick [ví dụ /dev/sdb1]. Gắn kết yêu cầu phải root, hoặc ít nhất là một sudomục trên dòng lệnh nhưng không phải trong trình quản lý cửa sổ (!) . Tôi không có ý automount, ý tôi là "nhấp vào biểu tượng" trong trình quản lý cửa sổ sẽ mở thiết bị trên GUI mà không có bất kỳ câu hỏi nào, trong đó trên CLI, người ta phải root.

Câu hỏi : Làm thế nào để gắn trong GUI hoạt động "dưới mui xe"? Có một configtập tin cho các nhà quản lý cửa sổ nói chung hay người ta phải thiết lập riêng lẻ này?

Tôi hiểu và sử dụng mountlệnh, tôi nghĩ để hiểu cách đọc và cấu hình /etc/fstabvà biết nơi để xem những gì các mục ở đó và /etc/mtabcó nghĩa là gì.


1
Ngoài ra, các nhà quản lý cửa sổ AFAIK không chịu trách nhiệm cho việc này; điều quan trọng là (các bộ phận của) môi trường máy tính để bàn chạy bên dưới. ví dụ: tôi sử dụng Awesome Gnome - Gnome bằng Awesome thay vì Gnome Shell - và các ổ đĩa tự động. nhưng họ sẽ không nếu tôi chỉ sử dụng Awesome đơn giản. Thành thật mà nói, tôi không thực sự hiểu tiền thưởng của bạn - câu trả lời của @ slm có vẻ khá rõ ràng.
strugee

2
Trong những ngày đầu, nó là công cụ tự động thực hiện các thủ thuật này trong nền (với khá nhiều lệnh mount giống như bạn sẽ sử dụng trên root-cli). Bây giờ có các quy trình con riêng tích hợp với GUI thực hiện công việc. Xem câu trả lời từ slm.
Nils

5
"Tôi thấy khó tin rằng mỗi người trong số [những người quản lý cửa sổ khác nhau] sẽ phải tìm cách riêng để giải quyết vấn đề này." -> Không bao giờ trình quản lý cửa sổ (WM) thực hiện việc này. Đó là môi trường máy tính để bàn (DE). Đối với tất cả họ phải tự làm điều đó, tốt, tất cả họ cũng làm rất nhiều thứ khác cho chính họ. Bằng sự lựa chọn . Nhưng họ không phải làm thế. Ví dụ, Gnome có giấy phép GPL, do đó, bất kỳ GPL nào khác của DE cũng chỉ có thể sử dụng các phần của Gnome, nếu họ muốn.
goldilocks

2
@goldilocks, ví dụ Cinnamon và MATE đã làm.
strugee

2
@strugee: Gnome có mối quan hệ lịch sử chặt chẽ với GTK (vốn ban đầu là GIMP) và các libs hỗ trợ cấp thấp hơn ( glib ) mà GNU cũng duy trì và tôi tin rằng đã được phổ biến từ Gnome và GTK. Tôi đoán hầu như tất cả mọi người đều tạo ra glib, nó cung cấp rất nhiều thứ cơ bản cho GUI đa tác vụ, hướng sự kiện "dưới mui xe" (chỉ: không phải là các phần đồ họa thực tế). Tôi nghĩ rằng Gnome về cơ bản là glib + gtk + trình quản lý Windom + một số ứng dụng.
goldilocks

Câu trả lời:


5

Đây là sự hiểu biết của tôi về tình huống này, nhưng tôi không phải là một chuyên gia nên nó ít kỹ thuật hơn các câu trả lời khác. Đây là những gì tôi hiểu sau khi sử dụng các hệ thống này trong nhiều năm, tôi đã không nghiên cứu chúng chi tiết.

Có ba người chơi chính ở đây và giữa họ, họ quản lý các thú cưỡi:

  • FUSE: Đây là trung tâm của mọi thứ, như được mô tả trong trang wikipedia của nó :

    Hệ thống tập tin trong không gian người dùng (FUSE) là một cơ chế hệ điều hành cho các hệ điều hành máy tính giống Unix cho phép người dùng không có đặc quyền tạo hệ thống tệp của riêng họ mà không cần chỉnh sửa mã hạt nhân. Điều này đạt được bằng cách chạy mã hệ thống tệp trong không gian người dùng trong khi mô-đun FUSE chỉ cung cấp "cầu nối" cho các giao diện kernel thực sự.

    Vì vậy, về cơ bản, đây là những gì cho phép người dùng không có đặc quyền gắn kết hệ thống tập tin.

  • gvfs: Trong họ Gnome của môi trường máy tính để bàn (bao gồm Gnome, Mate, Cinnamon), đây là (trong số những thứ khác), một daemon sẽ tự động gắn các ổ đĩa được kết nối mới. Nó làm như vậy thông qua FUSE. Tôi tin (nhưng cũng có thể sai) tương đương với gia đình KDE được gọi là KIO

    Các quy trình chính của gvfs(được lấy từ man gvfs):

    • gvfsd - trình nền gvfs chính
    • gvfs-fuse-daemon - gắn kết gvfs như một hệ thống tập tin cầu chì
    • gvfsd-metadata - ghi siêu dữ liệu gvfs
  • udev: Đây là hệ thống phát hiện các thiết bị mới và cho phép bạn chạy các tập lệnh / lệnh khi chúng được kết nối. Ví dụ: nó udevphát hiện một màn hình mới và có thể phản chiếu màn hình của bạn trên màn hình đó:

    udev là một trình quản lý thiết bị cho nhân Linux. Chủ yếu, nó quản lý các nút thiết bị trong / dev. Nó là sự kế thừa của devfs và hotplug, có nghĩa là nó xử lý thư mục / dev và tất cả các hành động không gian người dùng khi thêm / xóa thiết bị, bao gồm cả tải phần sụn.

    Cụ thể, gvfsdường như hoạt động thông qua gvfs-udisks2-volume-monitorđó là một màn hình âm lượng dựa trên udisks. udiskschính nó, tuy nhiên, dựa vào udev(xem man 7 udisks).

Vì vậy, về cơ bản (đọc "đơn giản hóa khủng khiếp") điều xảy ra là khi bạn kết nối ổ đĩa của mình, udevphát hiện nó và cảnh báo gvfsdaemon sau đó sẽ gắn nó dưới dạng thiết bị FUSE.

FUSE và udevsẽ giống nhau cho tất cả các môi trường máy tính để bàn, những thay đổi là trình nền DE theo dõi udevvà gắn ổ đĩa dưới dạng hệ thống tập tin FUSE.


1
Đặt D-bus lấp đầy khoảng trống giữa udev, gvfs và mọi thứ khác.
Braiam

Bạn có thể muốn cập nhật thông tin về gvfs. Họ đang chuyển sang GIO.
Braiam

8

Nó phụ thuộc vào môi trường cửa sổ của bạn (Gnome / KDE / v.v.), nhưng trong Gnome, chẳng hạn, bạn sẽ thấy các trình tiện ích đang chạy được gọi là , gvfs-*-volume-monitor. Các trình tiện ích này chịu trách nhiệm gắn các thiết bị khi chạy môi trường máy tính để bàn, chúng không liên quan gì /etc/fstabvà hoạt động hoàn toàn độc lập.

Theo như một tệp cấu hình, có một số tệp có liên quan đến tệp này nằm trong thư mục chính của người dùng đang chạy DE , $HOME/.local/share/gvfs-metadata.

Câu hỏi và trả lời về U & L này có tiêu đề: gvfs là gì và tại sao tôi muốn nó trên hệ thống của mình? , cố gắng giải thích GVFS là gì. Nó làm một công việc OK để giải thích nó. Nhưng tôi nghĩ những gì bạn thực sự hỏi về vấn đề này được giải quyết nhiều hơn bằng câu hỏi và trả lời U & L này có tiêu đề: Tự động gắn đĩa USB (Cách thức hoạt động) .


Câu trả lời dường như là trong bản HALvá Tôi tìm thấy một số giải pháp cho thunar[mà tôi sử dụng], v.v. Bài báo đã chỉ ra một hướng - cảm ơn vì điều đó! - nhưng tôi vẫn đang tìm kiếm một mẫu số chung là
erch

IIRC DE không cần root vì nó sử dụng FUSE (Hệ thống tập tin trong không gian người dùng).
strugee

@strugee đoán rằng DE có nghĩa là môi trường Máy tính để bàn, tôi nên tìm trong FUSE. Bạn có một gợi ý, ở đâu?
erch

@chirp tra cứu FUSE trên Wikipedia: vi.wikipedia.org/wiki/FUSE là nó, IIRC. và slm đã trả lời rồi. câu trả lời là môi trường máy tính để bàn, không phải trình quản lý cửa sổ, tự động hóa.
strugee

2
@chirp - Xem tại đây: bbs.archlinux.org/viewtopic.php?id=95509 . HAL đã không được chấp nhận, en.wikipedia.org/wiki/HAL_(software) . UDEV là sự thay thế trong tương lai: en.wikipedia.org/wiki/Udev
slm

8

Câu trả lời đơn giản là họ gian lận. Họ không sử dụng fstab. Họ thường sử dụng một udevcái móc để bắt các sự kiện chèn, gắn đĩa theo cách thủ công root, có thể được chuyển qua dbusđể thông báo cho người quản lý tệp của bạn rằng bạn có đĩa mới hoặc họ có thể sử dụng suidcác tiện ích thay vì dbusđể ngắt kết nối. Thật không may, không có tùy chọn cấu hình tiêu chuẩn nào cho điều này và vì phong trào máy tính để bàn tin vào việc che giấu sự phức tạp nên họ không ghi lại tài liệu này trong tài liệu người dùng, chỉ trong tài liệu dành cho nhà phát triển và họ giả sử một hệ thống người dùng duy nhất nên ổ USB chỉ hoạt động cho người dùng đầu tiên đăng nhập vào máy chủ X.


ĐÚNG! Đây là nhiều hơn những gì tôi đang tìm kiếm. Là người mới, tôi muốn hỏi nơi bắt đầu tìm kiếm, erm: "Tôi bắt đầu từ đâu" để theo dõi hành vi này [bất kỳ gợi ý nào sẽ giúp tôi không bị lạc hướng; một điểm khởi đầu hoặc lâu hơn sẽ giúp rất nhiều]
erch

2
@chirp để bắt đầu khám phá hãy xem udev (7) và /etc/udev/rules.d/*
hildred

5

PolicyKit (hoặc Polkit) là bộ công cụ cấp ứng dụng để xác định và xử lý chính sách cho phép các quy trình không có đặc quyền nói với các quy trình đặc quyền .

Đó là một khuôn khổ để tập trung hóa quá trình ra quyết định liên quan đến việc cấp quyền truy cập vào các hoạt động đặc quyền (như gọi phương thức Mount ()) cho các ứng dụng (máy tính để bàn) không có đặc quyền.

Một tác nhân xác thực được sử dụng để làm cho người dùng phiên chứng minh rằng người dùng của phiên thực sự là người dùng (bằng cách xác thực là người dùng) hoặc người dùng quản trị (bằng cách xác thực là quản trị viên).

GVFS là một hệ thống tệp ảo cho phép gắn các hệ thống tệp cục bộ và từ xa như một người dùng cùng với hỗ trợ rác. Ngoài ra còn có hỗ trợ FUSE cho phép các ứng dụng không sử dụng GIO truy cập vào hệ thống tệp GVFS, nhưng hầu hết các DE đều xác thực thông qua Chính sách cho các việc khác, như ngủ đông và tắt máy tính, và cho Trình quản lý mạng, vì vậy họ không cần sử dụng cầu chì.

Nó bao gồm hai phần:

  1. Một thư viện chia sẻ được tải bởi các ứng dụng hỗ trợ GIO;
  2. Bản thân GVFS, chứa một tập hợp các daemon giao tiếp với nhau và mô đun GIO qua D-Bus.

Gói gvfs cần được cài đặt, cùng với polkit-gnome cho các quy tắc polkit. Đảm bảo rằng một tác nhân xác thực đồ họa được cài đặt và tự động khởi động.

Các tệp cấu hình để quản lý các đặc quyền phải khác nhau cho mỗi phân phối. Arch Wiki bảo bạn tạo một tập tin bên dưới /usr/share/polkit-1/rules.d/. Trong Debian, chúng được đặt trong /etc/polkit-1/.

Nguồn: Bộ chính sách trên Debian || Polkit trên Arch Wiki | | GVFS trên Arch Wiki | | GVFS trên Wiki Gnome!


Bạn có chắc chắn GIO là viết tắt của GObject Introspection? Tôi đã nghĩ nó sẽ được gọi là GOI nếu vậy. Người Gnome dường như gọi nó là GI . Tôi đã không tìm thấy một lời giải thích khác về tên của GIO nhưng nó dường như không giống với GI.
terdon

@terdon Đó thực sự là một bản chỉnh sửa của strugee (bản sửa đổi 10 trên unix.stackexchange.com/posts/101951/revutions ). Xóa nó ...
Teresa e Junior

4

Một yếu tố phổ biến mà bạn đang tìm kiếm là FUSE , gvfs của Gnome, ví dụ, sử dụng nó dưới mui xe. 1 Đây là giao diện với kernel và tôi tin rằng nó phổ biến cho tất cả các hệ thống gắn kết (tự động) không có đặc quyền trên linux [nhưng xem bình luận]. Các DE riêng lẻ sẽ không tạo phiên bản riêng của họ vì điều này sẽ yêu cầu vá kernel.

Liên kết trang chủ đó thực tế đã lỗi thời, vì như đã lưu ý ở đây , FUSE đã trở thành một phần của hạt nhân chính thức vài năm trước, nhưng nó mô tả nguồn gốc và mục đích của dự án (nó không chỉ dành cho việc gắn kết không được ưu tiên).

Lý do các hệ thống khác nhau có thể sai lệch về phong cách ngoài lý do này là cùng một lý do bạn có các môi trường máy tính để bàn khác nhau: chúng thể hiện các tầm nhìn khác nhau về cách thức / giao diện của GUI. Họ đang quan tâm đến hình thức và chức năng của giao diện người dùng, nhưng FUSE thực hiện công cụ gắn kết và cấp nhân thực tế. Lưu ý rằng FUSE không thực sự làm "tự động" một phần, đó là thêm về phần "không có đặc quyền", nhưng phần tự động là khá đơn giản: tất cả các bạn phải làm là thăm dò, ví dụ /dev. Tôi đã viết một ứng dụng gắn kết hoạt động theo cách này; nó chỉ theo dõi sự xuất hiện của các nút mới. 2 Phần đó có thể là một trăm dòng C ++. Dễ dàng - không cần một API chung ở cấp độ đó.

1 Hoặc có thể, nếu đó là một thú cưỡi thực sự không được ưu tiên. Câu trả lời của Teresa có thể bao gồm các cách tiếp cận mới hơn để cho phép truy cập vào các thú cưỡi thông thường.

2 Như hildred quan sát, các cuộc gọi lại udev sẽ là một phương pháp hack tốt hơn, ít hơn.


Tôi đoán bạn có nghĩa là "trang chủ" và tôi sẽ xóa bình luận này sau khi lỗi đánh máy biến mất;) Nhân tiện, câu trả lời tuyệt vời như mọi khi!
erch

1
Vì các câu trả lời của chúng tôi có vẻ mâu thuẫn với nhau, tôi đã làm một số bài kiểm tra. Ít nhất là trong Debian, không có tác nhân Polkit hoạt động, người dùng không thể gắn kết. Ngoài ra, mô-đun fuse.ko không được tải ngay cả sau khi tôi gắn kết. (Tôi đang sử dụng Thunar trên Wheezy)
Teresa e Junior

3
@TeresaeJunior: Point (Tôi đã thêm một tài liệu tham khảo ở đây), mặc dù tôi không nghĩ có mâu thuẫn vì tuyến đường polkit là một mẹo nhỏ trong không gian người dùng - mount vẫn là một mount riêng tư. Trang wikipedia GVFS ghi chú "GVFS có thể sử dụng FUSE" vì vậy tôi sẽ thực hiện "có thể" thay vì "không".
goldilocks

1
Từ Wiki Gnome: "Ngoài ra còn có hỗ trợ cầu chì cho phép các ứng dụng không sử dụng gio để truy cập các hệ thống tệp gvfs."
Teresa e Junior

1
@TeresaeJunior: Vâng, vì vậy chúng là loại đồng thời, FUSE là một dự phòng. Tất nhiên, Gnome không phải là DE duy nhất xung quanh, nhưng tôi chắc chắn rằng hầu hết những người khác sử dụng glib (bao gồm cả gio) theo nhiều cách khác nhau. TBH Tôi chưa bao giờ thích tự động hóa, vì vậy tôi không có bất kỳ giai thoại nào về nó. Dù sao, FUSE là một khả năng.
goldilocks
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.