Bagaimana Linux memilih aplikasi mana untuk membuka file?


38

Jika suatu file memberitahukan format file kepada OS, bagaimana cara OS memilih aplikasi mana yang akan membukanya secara default?

Di Windows, apakah asosiasi disimpan di tabel registri?

Bagaimana Linux memilih aplikasi mana untuk membuka file?

Saya dulu sering menggunakan Nautilus, tapi sekarang saya ganti ke terminal. Benarkah di terminal, kita selalu harus secara eksplisit menentukan aplikasi mana yang membuka file? Apakah pengaturan aplikasi mana yang membuka file format tertentu secara default milik manajer file (misalnya Nautilus), dan itu tidak menjadi masalah ketika kita tinggal di terminal?


24
Linux hanyalah kernel OS. Saya kira maksud Anda lingkungan desktop Anda atau manajer file Anda di sini. Itu mungkin akan berbeda pada Android, ChromeOS, Linux (atau non-Linux) berbasis OS yang menjalankan KDE, Gnome, XFCE ... atau lainnya)
Stéphane Chazelas

mungkin. Saya tidak tahu yang melakukan pekerjaan. Saya menggunakan gnome, tetapi juga ingin tahu tentang umum.
Tim

Kemudian klarifikasi lingkungan dan aplikasi OS dan Desktop. Seperti nautilus di Ubuntu 12.04 dengan desktop "unity".
Stéphane Chazelas

(1) Saya di bawah Ubuntu 12.04. Apakah Gnome desktop saya atau "Unity"? (2) Saya dulu sering menggunakan Nautilus, tapi sekarang saya ganti ke terminal. Benarkah di terminal, kita selalu harus secara eksplisit menentukan aplikasi mana yang membuka file? Apakah pengaturan aplikasi mana yang membuka file format tertentu secara default milik manajer file (misalnya Nautilus), dan itu tidak menjadi masalah ketika kita tinggal di terminal?
Tim

Jawaban:


35

Mungkin ada mekanisme berbeda untuk menangani pengaturan default ini. Namun, jawaban lain cenderung berfokus pada lingkungan desktop yang lengkap, masing-masing dengan mekanisme sendiri. Namun, ini tidak selalu diinstal pada suatu sistem (saya sering menggunakan OpenBox), dan dalam hal ini, alat-alat seperti xdg-opendapat digunakan.

Mengutip Wiki Lengkungan :

xdg-open adalah alat desktop-independent untuk mengkonfigurasi aplikasi default pengguna. Banyak aplikasi menjalankan perintah xdg-open secara internal.

Saat ini, saya menggunakan Ubuntu (12,04) dan xdg-opentersedia. Namun, ketika Anda menggunakan lingkungan desktop yang lengkap seperti GNOME, xdg-openbertindak sebagai penerusan sederhana, dan menyampaikan permintaan file ke DE Anda, yang kemudian bebas untuk menanganinya seperti yang diinginkan (lihat jawaban lain untuk GNOME dan Nautilus, misalnya) .

Di dalam lingkungan desktop (mis. GNOME, KDE, atau Xfce), xdg-open hanya meneruskan argumen ke aplikasi pembuka file lingkungan desktop itu (gvfs-open, kde-open, atau exo-open, masing-masing), yang berarti bahwa asosiasi diserahkan ke lingkungan desktop.

... yang membawa Anda kembali ke jawaban lain dalam kasus itu. Tetap saja, karena ini adalah Unix & Linux, dan bukan Tanya Ubuntu:

Ketika tidak ada lingkungan desktop yang terdeteksi (misalnya ketika seseorang menjalankan window manager yang berdiri sendiri, misalnya Openbox), xdg-open akan menggunakan file konfigurasinya sendiri.

Semua seutuhnya:

                            |-- no desktop env. > handle directly.
User Request > xdg-open > --|
                            |-- desktop env.    > pass information to the DE.

Jika kasus pertama, Anda harus mengkonfigurasi xdg-opensecara langsung , menggunakan xdg-mimeperintah (yang juga akan memungkinkan Anda untuk melihat aplikasi mana yang seharusnya menangani file mana). Dalam kasus kedua ...

                        |-- GNOME? > gvfs-open handles the request.
                        |
Info. from xdg-open > --|-- KDE?   > kde-open handles the request.
                        |
                        |-- XFCE?  > exo-open handles the request.

... Anda harus mengonfigurasi pembuka file yang terkait dengan lingkungan desktop Anda. Dalam beberapa kasus, konfigurasi yang dilakukan xdg-mimedapat diarahkan ke alat konfigurasi yang tepat di lingkungan Anda.


11
Di dunia yang ideal, Gnome dan KDE akan menggunakan pengaturan xdg untuk memilih aplikasi mana yang akan membuka file, dan akan menyediakan UI untuk mengubah opsi xdg. Kemudian kita bisa memiliki hanya satu basis data pengaturan, bukan satu untuk setiap DE. Alas xdg terlambat muncul.
joeytwiddle

2
Di dunia yang ideal, Anda tidak akan memiliki tiga DE.
Russell Borogove

1
@RussellBorogove - maka kita semua harus pindah ke Windows. Ini adalah dunia yang ideal.
don_crissti

@don_crissti Saya pikir ini lebih dimaksudkan sebagai "ideal untuk pengembang atau administrator". Meskipun merupakan hal yang hebat untuk menawarkan variasi kepada pengguna akhir, memang akan jauh lebih mudah (namun tidak selalu "lebih baik") bagi desainer untuk fokus pada satu sistem. xdg-openhanyalah salah satu dari komponen ini yang mencoba menyatukan kedua ujungnya.
John WH Smith

1
@ John - tentang admin & berbagai aplikasi pengembang / desainer: setuju ... tapi kemudian, pengembang hulu hanya bisa melakukan begitu banyak. Dalam dunia yang ideal, alih-alih mengeluh tentang ini atau itu, kita semua akan berkontribusi pada proyek-proyek hulu seperti KDE, Gnome dll untuk meningkatkan kegunaan dan iteroperativitas antara DEs. Jika kita semua (jutaan) melakukan usaha kecil, semua masalah ini akan diselesaikan dalam beberapa hari.
don_crissti

11

Dari entri wiki ,

GUI berbasis Linux, seperti KDE dan GNOME, mendukung asosiasi berbasis tipe MIME. Misalnya, tipe teks MIME / polos akan dikaitkan dengan editor teks.

Juga, jawaban ini memiliki lebih banyak detail.

Manajer file sering menggunakan beberapa kombinasi opsi a dan b (mis. Lihat ekstensi file terlebih dahulu, jika tidak diketahui (atau file tidak memiliki ekstensi), lihat kontennya).

Jenis file tidak disimpan sebagai metadata pada sistem file linux yang umum.

Dari jawaban ini , saya melihat informasi di bawah ini.

Manajer file (Nautilus, secara default) menggunakan tipe file MIME untuk menentukan program mana yang akan dibuka. Ketika sebuah aplikasi diinstal, ia dapat menentukan tipe MIME apa yang dapat dibuka dan perintah yang digunakan untuk membuka file dalam file .desktop yang ditempatkan di / usr / share / aplikasi. Ini adalah file yang digunakan untuk menu, pintasan desktop, dll.


1
Pertanyaan saya adalah "diberikan jenis format file", menentukan aplikasi mana yang membuka file.
Tim

11

File tidak memberi tahu OS format file-nya, dengan satu pengecualian:

Jika file yang dapat dieksekusi dimulai dengan apa yang disebut garis shebang, seperti

#! /usr/bin/perl

kemudian baris ini memberi tahu kernel Linux bahwa ia harus dimulai /usr/bin/perl(yaitu, alih-alih mengeksekusi file ini, ia harus mengeksekusi usr/bin/perldan memberikan file ini sebagai argumen). Ini tentu saja hanya berfungsi dengan format file yang mengabaikan (atau mengerti) garis shebang tersebut.

Selain itu, sistem operasi tidak tahu apa-apa tentang tipe file. Namun banyak program yang memungkinkan membuka file lain memiliki mekanisme sendiri untuk memutuskan program mana yang akan digunakan untuk membuka file yang mana. Itu bisa berupa daftar di dalam program itu sendiri (Firefox misalnya menyimpan daftar seperti itu), atau program dapat mendelegasikannya ke lingkungan desktop (yang ada beberapa untuk Linux).

Biasanya, mekanisme itu hanya mempertimbangkan nama file untuk memutuskan jenis file apa; pengecualian adalah klien email dan browser web, di mana biasanya jenis file secara eksplisit diberikan oleh server / dinyatakan dalam surat.

Mekanisme biasanya dua langkah:

  • Pertama, dari nama file atau informasi yang diberikan, tentukan tipe file MIME (tipe MIME adalah daftar tipe file standar, tetapi dapat diperluas).
  • Kedua, dari tipe MIME, tentukan program mana yang akan dijalankan, biasanya melalui semacam registri yang dikelola baik oleh program itu sendiri atau oleh lingkungan desktop program itu ditulis untuk.

Terima kasih. Benarkah di terminal, kita harus selalu secara eksplisit menentukan aplikasi mana yang membuka file (kecuali skrip dengan shebang)? Apakah pengaturan aplikasi mana yang membuka file format tertentu secara default milik manajer file (misalnya Nautilus), sementara itu tidak menjadi masalah ketika kita tinggal di terminal?
Tim

Jika Anda ingin menggunakan asosiasi Gnome dari baris perintah, Anda bisa menggunakan perintah gnome-open. Saya yakin ada alat baris perintah serupa untuk lingkungan desktop lainnya. Sunting: Saya hanya mencatat bahwa John WH Smith memberikan perintah yang independen dari lingkungan desktop Anda.
celtschk

6
Koreksi : baris shebang bukan pesan ke kernel; itu adalah pesan ke shell .
Kazark


2
Karena tautan ke kode aktual di halaman tertaut itu tampaknya tidak berfungsi sekarang, berikut ini tautan lain ke kode kernel yang menangani baris shebang: lxr.free-electrons.com/source/fs/binfmt_script.c - tentu saja Anda juga bisa cukup instal sumber kernel sendiri dan lihat ke dalam file.
celtschk

4

Ini dilakukan mirip dengan MS-Windows.

Itu tidak dilakukan oleh OS. Ini dilakukan oleh manajer file, bagian dari sistem windowing. Biasanya bagian dari nama-file setelah titik terakhir .digunakan untuk membuat keputusan. Ada cara untuk mengaturnya di pengaturan, atau ketika Anda mengklik kanan pada file.

Jadi file tidak memberi tahu OS, file tidak aktif sehingga tidak bisa melakukan apa-apa sendiri, tetapi manajer file melihat nama-file, manajer file juga bisa melihat ke dalam file seperti halnya fileutilitas.


Bisa dibilang, di Windows itu tidak dilakukan oleh manajer file per se. Setiap aplikasi dapat memanggil shell32!ShellExecute(), dan meskipun shell32 adalah bagian dari Windows Shell, itu bukan bagian dari Windows Explorer, yang merupakan satu file manager default.
Ruslan

3

Seperti kata @richard, ini mirip dengan Windows. Manajer file generik dapat melihat nama file terlebih dahulu dan mencoba mengenali ekstensi file yang terkait dengan suatu program. Jika gagal, mungkin mencoba untuk membuka file dan mencari header. Jika Anda mencoba membaca file non-teks (katakanlah, .jpeg), Anda akan melihat serangkaian data yang menjelaskan file tersebut. Misalnya, ini adalah baris pertama dari .jpeg yang telah saya tempatkan:

'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xfe\x00;CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), quality = 90'


2
Beberapa manajer file menganalisis konten file sebelum ekstensi nama file (mungkin mereka bahkan selalu mengabaikan ekstensi, tidak yakin). Misalnya di Dolphin KDE jika Anda memiliki gambar GIF yang terkait dengan browser dan PNG dengan penampil gambar, mengganti nama file.pngfile PNG ke file.gifmasih akan membuka penampil gambar. Dan jika Anda mengosongkan file, itu akan terbuka di editor teks.
Ruslan

3

Saya akan berusaha memberikan jawaban yang mendasari bagaimana sistem Unix menangani file. Seperti yang telah ditunjukkan orang lain, frasa pertanyaan Anda menyesatkan karena file-file itu sendiri tidak melaporkan jenisnya dan kernel itu sendiri tidak memutuskan aplikasi mana yang akan digunakan.

Dalam sistem operasi Unix dan Windows, file disusun hanya sebagai urutan byte. Dari Sistem Operasi Tanenbaum , edisi ketiga:

Akibatnya, sistem operasi tidak tahu atau peduli apa yang ada di file. Semua yang dilihatnya adalah byte. Makna apa pun harus dipaksakan oleh program tingkat pengguna.

Inilah sebabnya, di lingkungan desktop, xdg-opendigunakan untuk menentukan aplikasi default untuk membuka jenis file tertentu.

Pada sistem Unix, file dibedakan antara file biasa dan file khusus . File biasa hanyalah data pengguna yang bisa berupa file teks (ASCII atau Unicode encoding) atau biner (kode yang dapat dieksekusi). File khusus adalah file yang sangat penting untuk menjalankan OS. Ini termasuk direktori, tautan, pipa, soket, dan file perangkat. ¹

Hal ini dengan konvensi yang nama file mengandung ekstensi untuk menunjukkan apa jenis file mereka mungkin menjadi misalnya * c untuk C kode sumber, * .html untuk halaman web, dll Dari Tanenbaum:

Dalam beberapa sistem (misalnya, UNIX), ekstensi file hanya konvensi dan tidak diberlakukan oleh sistem operasi. File bernama file.txt mungkin semacam file teks, tetapi nama itu lebih untuk mengingatkan pemiliknya daripada menyampaikan informasi aktual apa pun ke komputer. Di sisi lain, kompiler C mungkin benar-benar bersikeras bahwa file itu untuk dikompilasi dan diakhiri dengan .c, dan ia mungkin menolak untuk mengkompilasinya jika tidak.

Jika file disimpan atau diganti namanya tanpa ekstensi yang tepat, itu masih mempertahankan format yang sama untuk jenis file itu. Ini adalah cara sebagian besar pengelola file memutuskan aplikasi apa yang akan dibuka file, dan mengapa tanpa ekstensi sebagian besar akan meminta pengguna dengan "Pilih program yang ingin Anda gunakan untuk membuka file ini:".

Terakhir, variabel lingkungan digunakan untuk mendefinisikan pengaturan tingkat sistem dan tingkat pengguna. Misalnya, variabel EDITORyang digunakan untuk menentukan editor teks untuk membuka saat menangani teks misalnya vim, nano, dll Ini adalah bagaimana proses tahu mana editor untuk terbuka, seperti saat mengedit gitpesan commit. Jika tidak, Anda benar bahwa Anda harus menentukan aplikasi mana yang akan digunakan. Perhatikan bahwa vimmendeteksi jenis file dengan memeriksa ekstensi dan memeriksa konten file, jika pengaturannya filetype onditetapkan, yang kemudian menerapkan penyorotan sintaks yang benar, indentasi, dll. ²

TL; DR

Singkatnya, itu adalah aplikasi tingkat pengguna yang menentukan program mana untuk membuka jenis file tertentu, dan bukan OS itu sendiri.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.