Mở một thư mục trong trình quản lý tệp mặc định và chọn một tệp


9

Trong một chương trình mà tôi đang viết, tôi muốn cung cấp chức năng để mở thư mục chứa tệp mà tôi hiện đang xử lý và tự động chọn tệp đó (để người dùng không cần tìm kiếm nó).

Tôi biết rằng tôi có thể mở một thư mục trong trình quản lý tệp mặc định bằng cách sử dụng

xdg-open /path/to/directory

Tôi biết rằng tôi có thể mở một thư mục trong nautilus và chọn một tệp bằng cách sử dụng

nautilus /path/to/file.txt

Tôi nghĩ rằng tôi có thể sử dụng

xdg-mime query default inode/directory

để có được trình quản lý tệp mặc định và - nếu đó là nautilus - hãy gọi nó như hiển thị ở trên. Nhưng, mặc dù thực tế rằng nautilus là mặc định trên hệ thống của tôi ( xdg-openmở nautilus và menu địa điểm trong vỏ gnome) cũng xdg-mimetrả về Thunar.desktop. (Tôi đã thử find / -name Thunar.desktop -mount 2>/dev/nullnhưng không tìm thấy gì.)

Ngoài ra, tôi không biết làm thế nào để mở một thư mục và chọn một thư mục con trong nautilus (với cách tiếp cận được đề cập ở trên, nó sẽ mở thư mục con).

Làm cách nào tôi có thể mở một thư mục trong trình quản lý tệp mặc định chọn một tệp trong thư mục đó (nếu chọn một thư mục cũng có thể sẽ rất tuyệt, nhưng đối với ứng dụng này không cần thiết) hoặc ít nhất là tìm ra trình quản lý tệp mặc định để tôi có thể gọi nó trực tiếp?

Câu trả lời:


6

1. Để mở thư mục và chọn thư mục con / tệp trong nautilus:

nautilus --select path/to/file/or/directory

Từ trang nautilus (1) :

-s, --select
  Chọn URI được chỉ định trong thư mục cha.

2. xdg-mime trả lại Thunar.desktopnhưng xdg-openmởnautilus

xdg-mimesử dụng mimeapps.listđể xác định ứng dụng mặc định sẽ sử dụng.

Các mimeapps.listtệp riêng biệt tồn tại để xử lý các yêu cầu cụ thể của người dùng, hệ thống cụ thể và phân phối cụ thể. Thứ tự tra cứu của họ có thể được tìm thấy ở đây .

mimeapps.listliệt kê các ứng dụng mặc định cho một mô phỏng đã cho trong phần [Ứng dụng mặc định]. Nó cho phép liệt kê nhiều ứng dụng mặc định theo thứ tự ưu tiên giảm dần. Ví dụ :

[Default Applications]
mimetype1 = default1.desktop;default2.desktop;

trong đó mimetype1 là loại mime và * .desktop là các tệp máy tính để bàn.

xdg-opentìm kiếm tệp máy tính để bàn theo thứ tự tra cứu, qua danh sách ưu tiên cho đến khi tìm thấy tệp máy tính để bàn hợp lệ. Nếu không tìm thấy tệp nào như vậy trên tất cả các tệp thì tệp được ưu tiên nhất theo các liên kết sẽ được chọn và được sử dụng làm ứng dụng mặc định.

Vì vậy, trong trường hợp ví dụ của chúng tôi, giả sử chúng tôi default1.desktopkhông có mặt trên hệ thống của chúng tôi, vì vậy xdg-opensẽ cố gắng mở tệp của chúng tôi bằng cách sử dụng default2.desktop. Tuy nhiên, xdg-mimetrả về default1.desktopđó là mục đầu tiên trong mimeapps.listtệp của chúng tôi .

Trong trường hợp của bạn default1.desktopphải là Thunar.desktopđầu ra. Tuy nhiên nó không được cài đặt trên hệ thống của bạn. Vì vậy, xdg-openmở tập tin / thư mục của bạn bằng cách sử dụng nautilushiện diện trên hệ thống của bạn. Để xác minh điều này, bạn có thể kiểm tra mimeapps.listtệp của bạn để chứa dòng inode/directory. Đối với Ubuntu 17.10, vị trí của mimeapps.listtệp là:/usr/share/applications/defaults.list

LƯU Ý: Có thể tìm thấy thuật toán hoàn chỉnh để xác định 'Ứng dụng mặc định' tại đây .


Trong trường hợp một cái gì đó vẫn chưa được trả lời hoặc nếu có bất kỳ nhầm lẫn, hãy bỏ một bình luận.
Amit Singh

1
Câu trả lời xuất sắc của bạn trông giống như một câu hỏi ở vị trí đầu tiên (lý do xóa là gì), nó có thể đánh lừa người đánh giá, vì vậy tôi đã chỉnh sửa nó một chút. Hãy thoải mái quay lại nếu nó không ổn.
peterh - Phục hồi Monica

@peterh Cảm ơn bạn đã chỉnh sửa! Tôi sẽ ghi nhớ nó cho câu trả lời trong tương lai.
Amit Singh

+1. Cảm ơn rất nhiều cho câu trả lời của bạn. Phần đầu tiên hoạt động hoàn hảo. Phần thứ hai cùng với đặc tả này giải thích giá trị nào được giả sử nếu các biến môi trường không được đặt giải thích tại sao Thunar được trả về.
jakun

1
Tuy nhiên, tôi vẫn không thể truy xuất lý do tại sao Nautilus được bắt đầu vì nó không được chỉ định trong a mimeapps.list. Bạn có thể giải thích những liên kết này là gì không "nếu sau khi tất cả các tệp được xử lý, chúng tôi chưa tìm thấy một ứng dụng mặc định, hãy chọn ứng dụng được ưu tiên nhất (theo các hiệp hội) hỗ trợ loại"? Bạn có biết làm thế nào để tìm ra chương trình nào sẽ được bắt đầu tự động làm trắng cần phải thực hiện lại thuật toán này không?
jakun

0

Bạn có thể muốn xem xét sử dụng dbus để mở tệp của mình vì nó đang nhanh chóng trở nên phổ biến hơn.

Khái niệm về trình quản lý tệp "mặc định" chỉ thực sự tồn tại nếu bạn chỉ tập trung vào xdg-mime, tuy nhiên ở vùng đất dbus và thực sự là phần lớn các ứng dụng ngoài kia, câu chuyện có một thay đổi khác và khái niệm về trình quản lý tệp "mặc định" chấm dứt tồn tại

Đây là cách bạn mở tệp ( /home/me/path/to/folder/or/file) trong trình quản lý tệp (mặc định?), Sử dụng dbus:

dbus-send --session --print-reply --dest=org.freedesktop.FileManager1 --type=method_call /org/freedesktop/FileManager1 org.freedesktop.FileManager1.ShowItems array:string:"file:///home/me/path/to/folder/or/file" string:""

Những gì lệnh này làm là tìm kiếm bất kỳ dịch vụ dbus nào thực hiện org.freedesktop.FileManager1giao diện và gọi nó với đường dẫn đến tệp bạn muốn mở.

Lý do tôi đặt dấu chấm hỏi sau mặc định là vì dbus không tôn trọng khái niệm trình quản lý tệp "mặc định"; tất cả những gì nó làm là gửi cuộc gọi đến dịch vụ đầu tiên mà nó tìm thấy thực hiện giao diện và cho phép nó xử lý hoạt động. Bây giờ có thể ứng dụng mà nó chọn là trình quản lý tệp "mặc định" của bạn, nhưng điều đó không phải lúc nào cũng là một sự đảm bảo.

Hầu hết các ứng dụng hiện đại sẽ sử dụng dbustheo mặc định và sau đó dự phòng xdg-mimenếu cuộc gọi dbus không thành công, vì vậy đây là những gì tôi khuyên bạn nên làm.

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.