การตั้งค่าแอปพลิเคชันเริ่มต้นที่แตกต่างกันสำหรับสภาพแวดล้อมเดสก์ท็อปที่แตกต่างกัน


9

ฉันใช้ Ubuntu 12.04 พร้อมอินเทอร์เฟซ Unity ที่เป็นค่าเริ่มต้น ฉันติดตั้งในภายหลังเดสก์ท็อป KDE, XFCE, LXDE, gnome-shell และ Cinnamon

KDE มาพร้อมกับแอปพลิเคชันเริ่มต้นที่แตกต่างจาก Unity เช่น

  • kwrite สำหรับการแก้ไขข้อความ
  • konsole เสมือนเทอร์มินัล
  • kfontview สำหรับการดูและติดตั้งแบบอักษร
  • dolphin เป็นไฟล์เบราว์เซอร์ ฯลฯ

Other DE มาพร้อมกับแอปพลิเคชั่นเริ่มต้นอื่น ๆ

ปัญหาเกิดขึ้นเมื่อคุณต้องการเปิดไฟล์เช่นไฟล์ข้อความซึ่งทั้งคู่สามารถเปิดได้geditและkwriteฉันต้องการใช้kwriteกับ KDE และgeditUnity หรือ Gnome แต่ไม่มีวิธีการตั้งค่าเช่นนี้ ฉันสามารถตั้งค่าแอปพลิเคชันเริ่มต้นสำหรับไฟล์ข้อความโดยเปลี่ยนการตั้งค่าตามลำดับทั้งใน KDE และ Unity แต่มันจะกลายเป็นค่าเริ่มต้นสำหรับ DE ทั้งสอง

ตัวอย่างเช่นหากฉันตั้งkfontviewerเป็นแอปพลิเคชันการดูแบบอักษรเริ่มต้นใน KDE มันจะเปิดแบบอักษรเมื่อฉันอยู่ใน Unity หรือ Gnome และในทางกลับกัน นี่เป็นปัญหาเนื่องจากการโหลดโปรแกรม DE อื่น ๆ ใช้เวลานานกว่าค่าเริ่มต้นสำหรับ DE ที่ใช้

คำถามของฉันคือ: ฉันสามารถใช้แอปพลิเคชันเริ่มต้นที่แตกต่างกันสำหรับ DE ที่แตกต่างกันได้หรือไม่ อย่างไร?


คำตอบ:


5

ฉันได้รวบรวมโซลูชันนี้เพื่อแก้ไขปัญหาของคุณและทดสอบกับ KDE และ XFCE ด้วยการเปิดไฟล์ข้อความและไฟล์แบบอักษร เป็นโซลูชันทั่วไปที่ควรใช้กับสภาพแวดล้อมเดสก์ท็อปและประเภท mime จำนวนเท่าใดก็ได้ วิธีการทำงานคือมีสคริปต์ python แบบง่าย ๆ ที่เรียกว่า custom-open ซึ่งจะเปิดไฟล์โดยใช้แอพพลิเคชั่นต่าง ๆ สำหรับสภาพแวดล้อมเดสก์ท็อปที่แตกต่างกัน นี่คือขั้นตอนในการตั้งค่าโซลูชัน:

  1. บันทึกสคริปต์แบบเปิดที่กำหนดเองบนคอมพิวเตอร์ของคุณโดยเฉพาะอย่างยิ่งบนเส้นทางของคุณ แต่ไม่จำเป็นต้องเป็น
  2. บันทึก .custom-open.ini ในโฮมไดเร็กทอรีของคุณ ~ / .custom-open.ini
  3. กำหนด custom-open เป็นแอปพลิเคชั่นเริ่มต้นสำหรับไฟล์ทุกประเภทที่คุณต้องการจัดการ

กำหนดเองเปิด

#!/usr/bin/env python
import traceback, sys, os, ConfigParser, os.path
from subprocess import Popen, check_output
from gtk import MessageDialog, MESSAGE_ERROR, BUTTONS_CLOSE

try:
    file, desktop = sys.argv[1], os.environ['DESKTOP_SESSION']
    mime = check_output(['file', '--mime-type', file]).strip().split(': ')[1]
    config = ConfigParser.RawConfigParser()
    config.read(os.path.expanduser('~/.custom-open.ini'))
    cmd = config.get(desktop, mime)
    Popen([cmd] + sys.argv[1:])
except:
    msg = "CUSTOM OPEN ERROR\n\n" + traceback.format_exc()
    MessageDialog(None, 0, MESSAGE_ERROR, BUTTONS_CLOSE, msg).run()

กำหนดเอง-open.ini

[gnome]
text/plain = gedit
application/x-font-ttf = gnome-font-viewer

[xubuntu]
text/plain = leafpad
application/x-font-ttf = gnome-font-viewer

[kde-plasma]
text/plain = kate
application/x-font-ttf = kfontview

ดังนั้นสิ่งที่ยอดเยี่ยมเกี่ยวกับโซลูชันนี้คือคุณสามารถเพิ่มสภาพแวดล้อมเดสก์ท็อปใหม่ได้มากเท่าที่คุณต้องการและประเภท mime ที่คุณต้องการ เพื่อตรวจสอบชื่อที่คุณควรตั้งให้กับสภาพแวดล้อมเดสก์ทอปรันคำสั่งด้านล่างในเทอร์มินัล

env | grep -i DESKTOP_SESSION

เพื่อตรวจสอบประเภทไฟล์ mime ที่แน่นอนเพียงแค่เรียกใช้:

file --mime-type filename

แก้ไข:ความต้องการลิงก์สัญลักษณ์ถูกลบออกแล้วควรทำให้ใช้งานได้ง่ายขึ้น ฉันยังเพิ่มตัวจัดการข้อผิดพลาดกราฟิกที่จะนำการแจ้งเตือนหากเกิดข้อผิดพลาด


1
ขอบคุณสำหรับคำตอบ. ฉันทำตามขั้นตอนของคุณแล้วสร้างสคริปต์ลิงก์และไฟล์ทั้งหมด โซลูชันของคุณใช้งานได้ดีในรูปแบบบรรทัดคำสั่งและทำงานตามที่โฆษณาไว้ แต่เมื่อฉันพยายามตั้งค่าสคริปต์ (หรือมากกว่าลิงก์สัญลักษณ์) เป็นแอปพลิเคชั่นเริ่มต้นเพื่อเปิดไฟล์บางประเภทมันล้มเหลวและกลับไปใช้ค่าเริ่มต้นรอง ฉันไม่รู้ถ้าฉันทำอะไรผิด
Glutanimate

นี่คือวิธีที่ฉันกำหนดสคริปต์เป็นแอปเริ่มต้น: 1. ) สร้างตัวเรียกใช้งาน ( co.desktop) ด้วยExec=/home/user/.scripts/Customization/Defaultapps/custom-open-textใน ~ / .local / share / applications 2. ) การแก้ไขและเพิ่มเชื่อมโยงเริ่มต้นต่อไปนี้:./local/share/applications/mimeapps.list text/plain=co.desktopค้นหาข้อผิดพลาดใด ๆ ในขั้นตอนนี้หรือไม่?
Glutanimate

1
โอเคลองใช้เวอร์ชั่นใหม่ฉันได้ทำการปรับปรุงบางอย่างเพื่อให้ใช้งานง่ายขึ้น ฉันยังได้เพิ่มตัวจัดการข้อผิดพลาดกราฟิกดังนั้นตอนนี้มันควรป๊อปอัพการแจ้งเตือนด้วยข้อความข้อผิดพลาด ลองอีกครั้งและโพสต์ข้อความแสดงข้อผิดพลาดในความคิดเห็นหากยังไม่ได้ผล คุณสามารถพูดถึงอูบุนตูเวอร์ชันใดและสภาพแวดล้อมเดสก์ท็อปใดที่คุณได้ลองใช้ด้วย
Marwan Alsabbagh

มันใช้งานได้และมันทำงานได้อย่างน่าอัศจรรย์ (ใช้ LXDE / Unity)! โซลูชันของคุณควรได้รับทุก ๆ จุดสุดท้ายของความโปรดปรานนี้ ขอบคุณมากที่สละเวลาทำสิ่งนี้ (PS: ผมยังคิดว่าฟังก์ชั่นเช่นนี้ควรมาพร้อมกับอูบุนตูโดยค่าเริ่มต้น DE-กระโดดอาจจะไม่เป็นที่นิยมปฏิบัติ แต่ก็พอที่พบบ่อยที่จะรับประกันการแก้ปัญหาอย่างเป็นทางการ..)
Glutanimate

1
ฉันขอโทษ แต่ฉันไม่ใช่ OP ฉันแค่ตั้งค่าความโปรดปราน @Olive Twist จะต้องทำเครื่องหมายคำถามของตัวเองตามที่ได้รับคำตอบ
Glutanimate

2

หากคุณไม่พบวิธีที่ "ถูกต้อง" คุณสามารถใช้วิธีเดรัจฉานแรงเช่น:

  1. ตั้งค่าเริ่มต้นทั้งหมดในสภาพแวดล้อมเดสก์ทอปเดียว
  2. ทำสิ่งที่ต้องการcd $HOME;ls -Rlrt | lessเพื่อค้นหาไฟล์ที่เพิ่งได้รับการอัพเดตนั่นคือตัวเลือกที่ถูกบันทึกไว้
  3. ทำสำเนาไฟล์เหล่านั้นแยกต่างหากสำหรับแต่ละสภาพแวดล้อมเดสก์ทอป (สำรอง)
  4. ทำซ้ำสำหรับแต่ละสภาพแวดล้อมเดสก์ทอป
  5. คัดลอกชุดที่เหมาะสมก่อนที่จะเปลี่ยนเป็นสภาพแวดล้อมเดสก์ท็อปนั้น (อาจเป็นการออกจากระบบและกลับเข้าสู่ระบบและเลือกสภาพแวดล้อมเดสก์ท็อปใหม่)

หวังว่าจะมีวิธีการสลับสภาพแวดล้อมเดสก์ท็อปจากเชลล์สคริปต์ด้วยตัวเลือกในการบอกสภาพแวดล้อมเดสก์ท็อปว่าจะรับไฟล์การตั้งค่าจากที่ใด มันอาจจะสะอาดกว่าการย้ายไฟล์อยู่ตลอดเวลา แต่ฉันไม่ได้ทำการค้นคว้าว่ามันทำงานอย่างไร

โซลูชันอื่นที่ง่ายกว่ามาก แต่ไม่ใช่สิ่งที่คุณขออย่างแท้จริงคือ:

  1. สร้างบัญชีผู้ใช้แยกต่างหากสำหรับแต่ละสภาพแวดล้อมเดสก์ทอป
  2. สร้างกลุ่มใหม่สำหรับผู้ใช้เหล่านี้
  3. เพิ่มผู้ใช้เหล่านี้ทั้งหมดในกลุ่มใหม่
  4. สร้างไฟล์ข้อมูลทั่วไปที่คุณต้องการเข้าถึงจากผู้ใช้เหล่านี้-rwxrwxr-x ( chmod 775 list-of-files-and-directories) ด้วยวิธีนี้คุณจะไม่ได้รับข้อผิดพลาดในการอนุญาตพยายามเขียนลงไฟล์ที่ "ผู้ใช้" คนอื่นเขียนถึงก่อน

    • หากคุณต้องการให้ไฟล์บางไฟล์เหมือนกันสำหรับผู้ใช้เหล่านี้คุณสามารถสร้างไฟล์เหล่านั้นในผู้ใช้รายเดียวและเชื่อมโยงไฟล์กับส่วนที่เหลือ สิ่งนี้จะได้ผล แต่คุณจะต้องจำไว้ว่าพวกเขากำลังตั้งค่าวิธีนั้นเมื่อคุณเปลี่ยนสิ่งใด ๆ ตัวอย่างเช่นหากคุณแก้ไขหนึ่งในนั้นและบรรณาธิการของคุณสร้างไฟล์สำรองข้อมูลไฟล์สำรองนั้นจะถูกบันทึกเมื่อคุณแก้ไขเท่านั้นไม่ใช่ในบัญชีผู้ใช้อื่นทั้งหมด

คุณอาจทราบว่ามีการจัดเก็บการเชื่อมโยงไฟล์ของผู้ใช้ไว้ที่ใด~/.local/share/mime/
RobotHumans
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.