Làm cách nào để liên kết tất cả các loại tệp trong Wine với ứng dụng gốc tương ứng của nó?


8

Điều này được thực hiện dễ dàng cho một loại tệp duy nhất , như được trả lời trong Cách liên kết loại tệp trong Wine với ứng dụng gốc? , bằng cách tạo một .regkiểu tệp mong muốn. Nhưng điều này chỉ dành cho AVI. Tôi sử dụng một số ứng dụng rượu vang (uTorrent, Soulseek, Eudora, để đặt tên cho một số) có thể khởi chạy một loạt các tệp. Ví dụ, tệp đính kèm email có thể là JPG, DOC, PDF, PPS ... không thể (và không mong muốn) để theo dõi tất cả các loại tệp có thể có trong email hoặc tải xuống trong torrent.

Vì vậy, tôi đã nhận được một giải pháp để chung chung và rộng hơn. Tôi cần hiệp hội tập tin để tôn vinh bất kỳ ứng dụng gốc nào hiện đang được cấu hình. Và tôi muốn điều này được thực hiện cho tất cả các loại tệp được cấu hình trong hệ thống của tôi.

Tôi đã tìm ra cách để làm cho giải pháp chung chung. Đơn giản chỉ cần thay thế các ứng dụng đưa ra vào .regcho winebrowser, như thế này:

[HKEY_CLASSES_ROOT\.pdf]
@="PDFfile"
"Content Type"="application/pdf"
[HKEY_CLASSES_ROOT\PDFfile\Shell\Open\command]
@="C:\\windows\\system32\\winebrowser.exe \"%1\""

Ive đã thử nghiệm điều này và nó hoạt động chính xác. Vì Winebrowser sử dụng xdg-opennhư một phụ trợ và chuyển đổi đường dẫn windows của tôi thành Unix, nên ứng dụng (Linux) chính xác được khởi chạy.

Vì vậy, tôi cần một trình cập nhật "hàng loạt" để đăng ký rượu, loại wine-update-associationstập lệnh mà tôi có thể chạy bất cứ khi nào một ứng dụng mới được cài đặt. Có lẽ một công cụ có thể:

  • Liệt kê tất cả các loại Mime trong hệ thống của tôi có ứng dụng được cài đặt mặc định, được liên kết
  • Trích xuất tất cả các thông tin cần thiết (toàn cầu, loại mime, v.v.)
  • Tạo tệp .REG theo định dạng trên

Phần khó khăn là: tôi đã tìm kiếm RẤT NHIỀU để tìm thông tin về cách liên kết được thực hiện trong Ubuntu 10.10 trở đi, và tài liệu thì khan hiếm và khó hiểu, để nói rằng ít nhất. Freedesktop.org không có thông số kỹ thuật đầy đủ và thậm chí các tài liệu Gnome đã lỗi thời. Cho đến nay tôi đã thu thập được 4 tệp chứa thông tin liên kết, nhưng tôi không biết nên sử dụng (hoặc tại sao) hoặc sử dụng chúng để tạo .regtệp:

~/.local/share/applications/mimeapps.list
~/.local/share/applications/miminfo.cache
/usr/share/applications/miminfo.cache
/etc/gnome/defaults.list

Bất kỳ trợ giúp, kịch bản hoặc giải thích sẽ được đánh giá rất cao!

Cảm ơn!

Câu trả lời:


2

Nhiều năm sau, tôi đã tạo ra một tiện ích nhỏ quét cơ sở dữ liệu MIME (cả hệ thống và người dùng) và đăng ký tất cả các loại mime bản địa đã biết trong sổ đăng ký Windows.

Nó sử dụng xdg-openđể mở một tệp nếu có một ứng dụng (gốc) mặc định cho loại mime đó, nếu không thì sử dụng packagekitđể tìm kiếm một gói có thể xử lý tệp đó (giống như những gì Nautilus làm). Vì vậy, yêu cầu ban đầu của tôi là chỉ đăng ký các tiện ích mở rộng đã cài đặt, ứng dụng gốc không còn cần thiết nữa. Tuy nhiên, phiên bản đầu của tập lệnh chỉ lọc các loại như vậy. Đoạn trích làm cho nó có thể là:

perl -e '
    use strict; use warnings;
    use File::MimeInfo::Magic; use File::MimeInfo::Applications;
    while (my $line = <STDIN>) {
      chomp($line);
      my ($ext, $mime) = (split/\t/, $line);
      my ($def, @apps) = mime_applications_all($mime);
      print "$line\n" if ($def || @apps)
    }'

Theo mặc định, tập lệnh của tôi chỉ đăng ký các loại bản địa không có trình xử lý trong sổ đăng ký windows, nhưng nó cũng có thể ghi đè các liên kết đó (ví dụ: các tệp jpeg được mở trong trình xem gốc thay vì trình duyệt rượu Gecko mặc định). Nó cũng có thể bỏ qua một số phần mở rộng ngay cả khi chúng không có trình xử lý trong windows.

Nó cố gắng hết sức để trở nên thân thiện với winemenubuilder, có nghĩa là tất cả các hiệp hội mà nó tạo ra không được xuất bản dưới dạng các hiệp hội bản địa (hoặc dưới dạng mô phỏng mở rộng rượu vang) bởi winemenubuilder, sẽ xấu và có khả năng gây ra các vòng lặp. Điều này rất phức tạp và chưa hoàn hảo, đặc biệt với các phần mở rộng trường hợp hỗn hợp (ví dụ .C và .c)

Điều đó nói rằng, tôi hy vọng kịch bản này có ích cho tất cả mọi người:

https://github.com/MestreLion/wine-tools/blob/master/wine-import-extensions

Cải tiến chào mừng!


kịch bản của bạn nói rằng nó đã thành công, nhưng không có gì thay đổi đối với tôi. Không có vấn đề gì lớn, tôi đã tìm thấy một cách giải quyết khác trong Everythingchính ứng dụng rượu vang , nhưng tôi chỉ muốn thông báo cho bạn
phil294

1

BIÊN TẬP:

Có một lỗi rượu về điều này - đó là một cải tiến hơn là một lỗi. Vấn đề là có ShellExecutecuộc gọi xdg-open, và nếu không tìm thấy, hãy tìm mặc định gnome và kde. Bạn sẽ có thể áp dụng các bản vá và cuối cùng có phép thuật :-). Giải pháp này sạch hơn vì không cần phải lộn xộn với registry.

Để hoàn thiện hơn ở đây là cách vá và biên dịch rượu từ nguồn .

EDIT KẾT THÚC

Tôi cập nhật sổ đăng ký rượu với tập lệnh bên dưới để thêm danh sách các loại tệp phổ biến.
Bạn có thể mở rộng danh sách để thêm nhiều loại.
Nó sử dụng /usr/bin/gnome-opentrong gstart.exetệp để nó không hoạt động đối với các máy tính để bàn không phải là gnome .

Đặt cái này vào conf_wine.sh:

#!/bin/bash

SRC=~
WINE=~/.wine
REG=$WINE/system.reg
GSTART=gstart.exe
GSTART_TARGET=$WINE/drive_c
EXE_TARGET=$WINE/drive_c/windows
FNKEY=/tmp/"key"$(date +%F_%H-%M-%S)".reg"

[ -e $FNKEY ] && { echo "temporary key file exists..try again"; exit 1; }

echo "copying gstart.exe"
cp $SRC/$GSTART $GSTART_TARGET
chmod +x $GSTART_TARGET

echo "backing up the registry"
cp $REG $REG.$(date +%F_%H-%M-%S).old

echo "setting new wine registry keys"
for i in http doc docx ppt pptx xls xlsx odt ods xml txt pdf odt svg zip ; do {
    echo "setting $i"
key='[HKEY_CLASSES_ROOT\.'$i']
@="'$i'file"
"Content Type"="application/'$i'"
[HKEY_CLASSES_ROOT\'$i'file\Shell\Open\command]
@="C:\\gstart.exe \"%1\""'
    echo "$key" > $FNKEY
    regedit $FNKEY
}
done

echo "done"

Đây gstart.exelà một kịch bản bash..và là cầu nối cho cả hai thế giới:

#!/bin/bash

OPEN_HANDLER=/usr/bin/gnome-open
# logging, optional
LOG=$HOME/.wine/gstart.exe-log.$(id -u -n)
echo "[ $(date) ] $# argument(s) received: '$@'" > $LOG

# convert the path
RESULT=$(winepath "$@" 2> /dev/null)
echo "$OPEN_HANDLER $RESULT" >> $LOG
TMP=$TMPDIR
TEMP=$TMPDIR

# finally open the file
$OPEN_HANDLER "$RESULT"

Ghi chú:

  1. sao chép gstart.exetrong thư mục làm việc hiện tại của bạn trước khi chạy conf_wine.shvì nó sẽ sao chép nó vào .winethư mục.
  2. các vị trí thư mục có thể được thay đổi, ví dụ gstart.exekhông phải ngồi c:\.
  3. không có phép thuật: các loại mới phải được thêm bằng tay. Bạn có thể cải thiện nó để đọc các tệp Linux (mim Ứng dụng.list, ..) và cập nhật sổ đăng ký rượu nếu cần.
  4. thử nghiệm để làm việc ít nhất trong rượu1.4.

Câu hỏi thường gặp về Rượu: Làm cách nào để liên kết chương trình gốc với loại tệp trong Wine?


+1 cho nỗ lực, nhưng điều này hầu như không giải quyết vấn đề của tôi. Đầu tiên, có rất ít điểm sử dụng gnome-openhơn xdg-open, mà tôi đã đề cập trong câu hỏi, và còn lâu mới cầm tay hơn. Thứ hai, mã hóa một vài phần mở rộng tệp là không đủ đối với tôi: như tôi đã nói, "Tôi cần liên kết tệp để tôn vinh bất kỳ ứng dụng gốc nào hiện đang được cấu hình. Và tôi muốn điều này được thực hiện cho tất cả các loại tệp được định cấu hình trong hệ thống của tôi." Và tôi biết điều này là khó khăn. Đó là "ma thuật" mà bạn đã đề cập trong ghi chú số 3 mà tôi quan tâm;)
MestreLion

Tôi đoán rằng tôi đã đọc câu hỏi của bạn hơi nhanh trong lần đầu tiên .. Tôi thấy bạn đang sử dụng xdg-open và tôi sẽ thay đổi nó trong các tập lệnh của mình. Về phép thuật: một cách sẽ là đọc lặp lại tất cả các mục trong tệp mime thay vì có. Nhưng sau đó, bạn sẽ phải chạy nó mỗi khi bạn cập nhật hệ thống của mình vì các tiện ích mở rộng mới có thể đã được thêm vào. Điều đó không xảy ra mỗi ngày mặc dù.
Rosch

Hoặc thậm chí tàn nhẫn thiết lập một cronjob cho bản cập nhật đăng ký..chỉ sửa đổi sổ đăng ký nếu mimes đã được cập nhật.
Rosch

Phần khó khăn không phải là khi để cập nhật registry, nhưng như thế nào , hay chính xác hơn, cập nhật cho extentions mà tập tin? Tôi không biết làm thế nào để phân tích nhất quán cơ sở dữ liệu mime để lấy tất cả các tiện ích mở rộng có ứng dụng được cài đặt mặc định . Hoặc, như bạn đã nói: làm thế nào để đọc lặp lại trên tất cả các mục trong tệp mime ? Có một số loại mime trong tôi mimeapps.lstmà tôi chưa cài đặt ở đây và một số điểm quay lại ứng dụng Wine (sẽ gây ra các vòng lặp vô hạn)
MestreLion

Xin lỗi về những lỗi tiếng Anh trong bình luận đầu tiên của tôi, tôi đã chỉnh sửa nó và nó đã bị rối lên một chút .. Xin vui lòng đọc EDIT của tôi trong câu trả lời, có bạn có phép thuật như tất cả các tệp được chăm sóc.
Rosch

0

Tôi đã thu thập Thông tin ở khắp mọi nơi và đã tìm thấy những điều sau đây để làm việc:

Tôi đã tạo một tệp có tên ~ / .wine / drive_c / gstart.exe

với những điều sau đây :

#!/bin/bash
OPEN_HANDLER=/usr/bin/xdg-open
# logging, optional
LOG=$HOME/.wine/gstart.exe-log.$(id -u -n)
echo "[ $(date) ] $# argument(s) received: '$@'" > $LOG
# convert the path
RESULT=$(winepath "$@" 2> /dev/null)
echo "$OPEN_HANDLER $RESULT" >> $LOG
TMP=$TMPDIR
TEMP=$TMPDIR
# finally open the file
$OPEN_HANDLER "$RESULT"

Sau đó: Tạo một tệp có tên linuxnative.reg trong my ~ / bin

với những điều sau đây :

REGEDIT4
[HKEY_CLASSES_ROOT\.doc]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\.rtf]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\.odt]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\.pdf]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\.tif]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\.doc]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\.docx]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\.jpg]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\linuxnative]
[HKEY_CLASSES_ROOT\linuxnative\shell]
[HKEY_CLASSES_ROOT\linuxnative\shell\open]
[HKEY_CLASSES_ROOT\linuxnative\shell\open\command]
@="c:\\gstart.exe \"%1\""

sau đó bạn làm một

regedit linuxnative.reg

Hi vọng điêu nay co ich.


Cảm ơn bạn đã cố gắng để giúp đỡ! Nhưng một danh sách mã hóa cứng của một vài tiện ích mở rộng nổi tiếng không giải quyết được vấn đề của tôi. Ngoài ra, "thông tin bạn thu thập từ khắp mọi nơi" dường như là cùng một thông tin đã được tôi đăng và rosch, bao gồm cả bản sao và dán gstart.exekịch bản của anh ấy .
MestreLion
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.