Открытие файла с помощью пользовательской команды: как указать файл в командной строке?

Вопрос или проблема

Я хочу открыть PDF файл с помощью PDF-XChange Viewer через WINE. Как мне указать имя PDF файла в строке “пользовательская команда”, чтобы я мог открыть PDF файл двойным щелчком? Я пытался использовать \”z:%f\” в соответствии с предложением здесь для использования Foxit Reader. Но мой PDF-XChange Viewer запускается только с пустым окном.

wine "c:/Program Files/Tracker Software/PDF Viewer/PDFXCview.exe" \"z:%f\"

Я использую Ubuntu 10.04 и WINE 1.2.2. Версия PDF-XChange Viewer 2.5.

Я нашел записи в блоге о той же проблеме для Foxit Reader и для PDF-XChange Viewer. Ни одно из них не сработало для меня. Поэтому я отредактировал их и получил вариант, подходящий для моего случая:

#!/bin/bash  
Filename="z:${1//\//\\}"
wine "C:\Program Files\Tracker Software\PDF Viewer\PDFXCview.exe" $Filename

Сохраните этот bash скрипт и открывайте PDF с помощью этого скрипта. Теперь двойной щелчок по PDF-файлам будет открывать их с помощью PDF-XChange Viewer.

Если скрипт работает, то вы должны принять этот ответ, даже если он ваш собственный.

То, что работало здесь для других приложений в отношении пользовательской команды, было похоже на то, что вы пытались сделать, но с небольшими различиями.

wine "C:\Program Files\Tracker Software\PDF Viewer\PDFXCview.exe" Z:%f

Упомянуто здесь для фотошопа с дополнительной информацией о том, как изменить отображаемое имя, если это необходимо для использования по щелчку правой кнопкой мыши: https://ubuntuforums.org/showthread.php?t=1460914&p=9193687#post9193687

Это основано на отличном скрипте @Flint.

Сначала я пытался использовать "Z:"%U переменную в конце файла.desktop в поле Exec= для программ WINE. Это работало нормально, пока я не открыл программу без указанного файла. Программы WINE жаловались на отсутствующий файл, потому что строка Exec= указывала на привязку Z:, которая явно не является файлом, а абсолютным путем к файлу. Появлялись сообщения Файл не найден: Z: или подобные в программе WINE. Немного раздражает.

Проблема с "Z:"%U в том, что это не условная переменная, если Z: используется там. Тем не менее, WINE абсолютно требует Z:, потому что иначе не может найти правильные пути к файлам.

Ваш скрипт делает всю штуку "Z:"%U условным предложением. Скрипт выполняет свою работу ровно так, как я и хотел.

Тем не менее, скрипт должен учитывать все исполняемые файлы, написанные заглавными буквами. На данный момент он не может указать на файлы MS Office (docx, pptx…) для MS Office 2010, потому что все исполняемые файлы написаны как WINWORD.EXE или POWERPNT.EXE. Конечно, исполняемые файлы могут быть переименованы в нижний регистр, но я предпочитаю более универсальное решение, нежели переименовывать отдельные exe для каждой программы.

Неряшливое и универсальное решение – это изменить код скрипта следующим образом:

#!/bin/bash

allargs=("$@")

fixpath=0
for idx in "${!allargs[@]}"; do
    arg="${allargs[$idx]}"

    if [[ $fixpath -eq 0 ]]; then
        # исправляем пути к файлам только после нахождения первого исполняемого файла в arg
        if [[ "$arg" == *.exe ]]; then
            fixpath=1
        fi
        if [[ "$arg" == *.EXE ]]; then
            fixpath=1
        fi
        continue
    elif [[ $fixpath -eq 1 ]]; then
        # если arg начинается с "https://askubuntu.com/" и это путь, который существует на хосте
        # предшествуем пути с привязкой 'Z:'
        if [[ "${arg:0:1}" == "https://askubuntu.com/" && -e "$arg" ]]; then
            allargs[$idx]="z:${arg//\//\\}"
        fi
    fi
done

exec env "${allargs[@]}"

Оператор or почему-то не сработал. Я уверен, что есть более элегантный способ достичь того же результата, в любом случае.

Если эта программа уже установлена с помощью WINE, тогда я не думаю, что нужен абсолютный путь. Я думаю, что только

 wine pdfxcview filename

откроет файл.

Ну, может быть, мой ответ глупый. Что на самом деле вы пытаетесь сделать? Вы пытаетесь исправить ошибку запуска программы?

Я понимаю, что это старый вопрос, но я хочу поделиться своим решением, которое я нашел после того, как начал использовать PDFXchangeEditor (преемник PDFXchangeViewer) и столкнулся с проблемой, чтобы он принимал несколько входных файлов из хост-ос. Прежде всего, принятый ответ и все другие ответы, которые были опубликованы, предполагают, что программа будет обрабатывать только один файл. На самом деле вы можете передать несколько аргументов файлов сразу, и она откроет их все нормально, с небольшим трюком.

Трюк заключается в использовании %F кодовойexpansion в поле Exec в .desktop запускателе приложения и предшествовании всем расширенным локальным файловым аргументам в этом поле с Z:, что можно сделать с помощью следующего скрипта.

Назовите его wine-env. Это помещается в /usr/local/bin и убедитесь, что вы дали ему chmod +x.

#!/bin/bash

allargs=("$@")

fixpath=0
for idx in "${!allargs[@]}"; do
    arg="${allargs[$idx]}"

    if [[ $fixpath -eq 0 ]]; then
        # исправляем пути к файлам только после нахождения первого исполняемого файла в arg
        if [[ "$arg" == *.exe ]]; then
            fixpath=1
        fi
        continue
    elif [[ $fixpath -eq 1 ]]; then
        # если arg начинается с "https://askubuntu.com/" и это путь, который существует на хосте
        # предшествуем пути с привязкой 'Z:'
        if [[ "${arg:0:1}" == "https://askubuntu.com/" && -e "$arg" ]]; then
            allargs[$idx]="Z:$arg"
        fi
    fi
done

exec env "${allargs[@]}"

А для файла .desktop приложения назвайте его pdfxce.desktop и поместите его в ~/.local/share/applications/, и его содержание должно выглядеть так:

[Desktop Entry]
Name=PDF-XChange Editor
Type=Application
Terminal=false
Exec=wine-env WINEDEBUG=-all WINEPREFIX=/home/<user>/.local/share/bottles/pdfxce wine PDFXEdit.exe %F
Icon=/home/<user>/.local/share/icons/bottles/pdfxce-pdfxedit.png
Path=/home/<user>/.local/share/bottles/pdfxce/drive_c/Program Files/Tracker Software/PDF Editor
StartupNotify=true
StartupWMClass=PDFXEdit.exe

Вам нужно изменить часть с вашим именем пользователя. Я храню все свои директории wineprefix в папке под названием “bottles”. Возможно, у вас есть свой способ организации ваших wineprefix, поэтому измените все части, которые содержат “bottles”, соответственно.

И последний шаг, назначьте PDF файлы на приложение как обычно (Щелчок правой кнопкой мыши на PDF -> Свойства -> вкладка Открыть с).

Источник: Спецификация десктоп-записей Freedesktop

Я следовал этой ссылке, чтобы установить 32-битный PDF XChange Viewer в Ubuntu 64 Bit 14.04. Затем ссылка показывает скрипт для открытия PDF XChange Viewer с именем файла в качестве аргумента. Я создал этот скрипт и сохранил его в /bin.

Затем я отредактировал ~/.local/share/applications/wine-extension-pdf.desktop следующим образом:

[Desktop Entry]
Type=Application
Name=PDF-XChangeViewer
MimeType=application/pdf;
Exec=PDFXCview %f
NoDisplay=true
StartupNotify=true

Мой скрипт был назван PDFXCview.

Ответ или решение

Чтобы открыть PDF-документ с помощью PDF-XChange Viewer через WINE, необходимо правильно указать путь к файлу в командной строке. Я предложу одно из решений, которое должно работать на вашей системе.

Шаг 1: Создание Bash-скрипта

Сначала создадим Bash-скрипт, который будет обрабатывать ввод и передавать правильный путь к PDF-XChange Viewer.

  1. Откройте терминал и создайте новый файл скрипта:

    nano /usr/local/bin/pdfxcview
  2. Вставьте следующий код в редактор:

    #!/bin/bash
    
    # Преобразование пути из Unix в Windows
    Filename="z:${1//\//\\}"
    
    # Запуск PDF-XChange Viewer с указанным файлом
    wine "C:\\Program Files\\Tracker Software\\PDF Viewer\\PDFXCview.exe" "$Filename"
  3. Сохраните файл и выйдите из редактора. Сделайте скрипт исполняемым:

    chmod +x /usr/local/bin/pdfxcview

Шаг 2: Обновление .desktop файла

Теперь необходимо обновить или создать .desktop файл для вашего PDF-XChange Viewer, чтобы связать его с PDF-документами.

  1. Создайте или откройте файл ~/.local/share/applications/wine-extension-pdf.desktop:

    nano ~/.local/share/applications/wine-extension-pdf.desktop
  2. Вставьте следующий контент:

    [Desktop Entry]
    Type=Application
    Name=PDF-XChange Viewer
    MimeType=application/pdf;
    Exec=pdfxcview %f
    NoDisplay=false
    StartupNotify=true
  3. Сохраните изменения и закройте редактор.

Шаг 3: Проверка MIME-типов

После внесения изменений необходимо обновить базу данных MIME, чтобы ваш новый .desktop файл распознавался:

update-desktop-database ~/.local/share/applications/

Шаг 4: Установка связей файлов

Теперь вам нужно установить PDF-XChange Viewer как программу для открытия PDF файлов. Для этого:

  1. Найдите PDF файл в файловом менеджере, щелкните правой кнопкой мыши и выберите "Свойства".
  2. Перейдите на вкладку "Открыть с".
  3. Найдите и выберите "PDF-XChange Viewer" из списка программ. Если его нет в списке, попробуйте обновить базу данных MIME ещё раз.

Заключение

Теперь, когда вы дважды щелкнете на PDF-файле, он должен открываться в PDF-XChange Viewer через WINE. Данная инструкция должна решить вашу проблему. Если у вас возникнут дополнительные вопросы или трудности, не стесняйтесь их задавать.

Оцените материал
Добавить комментарий

Капча загружается...