วิธีการกำหนดค่า `xdg-open` อย่างถูกต้องและง่ายดายโดยไม่มีสภาพแวดล้อมใด ๆ


63

ฉันใช้จัดการหน้าต่าง OpenBox โดยไม่ต้องสภาพแวดล้อมเดสก์ทอปใด

xdg-openมีพฤติกรรมแปลก ๆ firefoxจะเปิดทุกอย่างด้วย

$ xdg-settings --list
Known properties:
  default-web-browser           Default web browser

ฉันกำลังมองหาโปรแกรมง่ายๆ สิ่งที่ชอบอ่านทุก*.desktopไฟล์ใน/usr/share/applications/โฟลเดอร์และตั้งค่า xdg โดยอัตโนมัติ


โดยใช้xdg-mime(ส่วนหนึ่งของxdg-utils) เป็นคำตอบที่ดีที่สุดสำหรับการทำงานกับ xdg-open(สอบถามกำหนดค่า) ดูเพิ่มเติมที่unix.stackexchange.com/questions/8793/…
michael

คำตอบ:


24

คุณสามารถใช้perl-file-mimeinfoในที่extraเก็บเพื่อจัดการ mimetypes

ตัวอย่างเพื่อเปิด.pdfไฟล์ทั้งหมดในapvlv:

/usr/bin/vendor_perl/mimeopen -d $file.pdf

apvlvแล้วที่พรอมต์ให้ป้อนโปรแกรม:


มันได้ผล. แต่มันจะเปิดไฟล์เท่านั้น ดังนั้นการกำหนดค่าxdg-openและแอปพลิเคชั่นที่เหลือโดยใช้ของฉันxdg-openจะไม่เปิดไฟล์เลย
kravemir

ฉันไม่ได้ติดตามความคิดเห็นของคุณ อะไรไม่ทำงาน -dสวิตช์เป็นการตั้งค่าเริ่มต้น ดังนั้นหากคุณใช้เพื่อเปิดfileA.pdf- คุณควรจะสามารถเปิดfileB.pdfด้วยแอปพลิเคชันที่คุณต้องการ
jasonwryan

1
ใช่. mimeopen -d a.pdfตั้งค่าเริ่มต้นสำหรับ*.pdfแต่ตั้งค่าเริ่มต้นสำหรับตัวเอง - ใช้mimeopen b.pdfงานได้ แต่xdg-openการกำหนดค่าไม่เปลี่ยนแปลงและยังคงเปิดทุกอย่างด้วยfirefox: /
kravemir

3
เมื่อฉันได้ตั้งค่าเริ่มต้นด้วยmimeopen, xdg-openทำงานตามที่คาดไว้ - ในกรณีของ.pdfs apvlvจะเปิดพวกเขาด้วย
jasonwryan

1
สิ่งนี้ใช้ไม่ได้สำหรับฉันใน Lubuntu 16.04 sudo xdg-mime default pluma.desktop text/plainให้touch: cannot touch "/home/user/.local/share/applications/mimeapps.list": No such file or directory /usr/bin/xdg-mime: 807: /usr/bin/xdg-mime: cannot create /home/user/.local/share/applications/mimeapps.list.new: Directory nonexistent; จะช่วยให้/usr/bin/vendor_perl/mimeopen -d $file.txt bash: /usr/bin/vendor_perl/mimeopen: No such file or directory
Nickolai Leschov

62

ทำไมไม่ใช้ยูทิลิตี้จาก xdg?

เพื่อให้ Thunar เป็นไฟล์เบราว์เซอร์เริ่มต้นเช่นแอปพลิเคชันเริ่มต้นสำหรับการเปิดโฟลเดอร์

$ xdg-mime default Thunar.desktop inode/directory

การใช้ xpdf เป็นเครื่องมือดู PDF เริ่มต้น:

$ xdg-mime default xpdf.desktop application/pdf

สิ่งนี้ควรสร้างรายการในฐานข้อมูล MIME ท้องถิ่นของคุณ:

~/.local/share/applications/defaults.list
[Default Applications]
application/pdf=xpdf.desktop

ไฟล์ PDF ของคุณควรเปิดด้วย xpdf ทันที


+1 และดูคำตอบที่เกี่ยวข้องกับคำถามที่เกี่ยวข้องของฉัน, unix.stackexchange.com/questions/77136/…
michael

2
คำตอบที่มีประโยชน์ที่สุดขอบคุณ ง่ายที่สุดที่จะรู้เกี่ยวกับdefaults.listมันดังนั้นมันสามารถแก้ไขได้ด้วยมือถ้าจำเป็นต้องเป็น
mVChr

ด้วยเหตุผลบางอย่างxdg-mimeไม่ได้แก้ไขdefaults.listแต่การแก้ไขด้วยตนเอง (ขอบคุณคำแนะนำในคำตอบนี้) ได้ทำเคล็ดลับ
Skippy le Grand Gourou

ต้องใช้การพึ่งพา Perl บางอย่างของ FYI สำหรับสิ่งนี้ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งแล้ว การกระจาย RPM / DEB จะติดตั้งสิ่งเหล่านี้ให้คุณตามปกติ
lzap

2
ดูเหมือนว่าจะเรียกว่าตอนนี้defaults.list mimeapps.listดูโค้งวิกิพีเดียmimeapps.listสำหรับรายชื่อของสถานที่ที่ถูกต้องสำหรับ
Mateen Ulhaq

7

บน Debian คุณสามารถใช้คำสั่งในฐานะ root

update-mime-database /usr/share/mime

มีshared-mime-infoแพคเกจติดตั้ง


2
ฉันลองแล้ว มันไม่ทำงาน ฉันกำลังใช้งาน Arch
kravemir

-1 สิ่งนี้เป็นสิ่งเฉพาะสำหรับสภาพแวดล้อมเดสก์ท็อปที่ขึ้นอยู่กับ shared-mime-info เช่น GNOME
craymichael

7

คุณสามารถใช้สิ่งนี้เพื่อสร้างxdg-mimeคำสั่งที่เหมาะสมสำหรับแต่ละ.desktopไฟล์ของคุณและชนิดแฟ้มที่มีอยู่จากนั้นดำเนินการสิ่งที่คุณต้องการ หมายเหตุ/usr/share/applicationsอาจมีไดเรกทอรีย่อย

for dd in /usr/share/applications ~/.local/share/applications; do
  for d in $(ls $dd 2>/dev/null | grep "\\.desktop$"); do
    for m in $(grep MimeType $dd/$d | cut -d= -f2 | tr ";" " "); do
      echo xdg-mime default $d $m;
    done;
  done;
done

3

นี่เป็นเหมือนคำตอบของ @ alebแต่ใช้ได้กับไฟล์เดสก์ท็อปที่มีช่องว่าง:

find /usr/share/applications ~/.local/share/applications -iname '*.desktop' -print0 | while IFS= read -r -d $'\0' d; do
  for m in $(grep MimeType "$d" | cut -d= -f2 | tr ";" " "); do
    echo xdg-mime default "'$d'" "'$m'"
  done
done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.