Прозрачные винные программы

9

Когда я хочу запустить винную программу, я должен напечатать, например,

$ wine ~/.wine/drive_c/Program\ Files/TextAloud/TextAloudMP3.exe

Можно ли было бежать напрямую TextAloudMP3? Я имею в виду не только из командной строки (я мог бы создать псевдоним), но и во всей графической среде. Я запускаю программы с dmenu.

xralf
источник

Ответы:

10

Я предполагаю, что вы хотели запускать exe-программы непосредственно с wine, так что скажите ядру запустить win32-бинарные файлы с помощью Wine,

  1. Смонтируйте binfmt fs, добавьте строку none /proc/sys/fs/binfmt_misc binfmt_misc defaults 0 0в / etc / fstab и выполните mount -aвпоследствии

  2. echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register зарегистрировать двоичный формат

Итак, позже вы просто запустите исполняемый файл с /path/to/XX.exe

Обратите внимание, что это также создает проблему безопасности.

маргаритка
источник
Я не могу редактировать /proc/sys/fs/binfmt_misc/register. Это пишет /proc/sys/fs/binfmt_misc/register E667: Fsync failed. Я пытался редактировать под учетной sudoзаписью пользователя и под учетной записью root тоже. Оба пишут эту ошибку.
xralf
Вот Это Да! Я не знал, что ядро ​​может это сделать. Этот конкретный случай использования чувствует зло, хотя. Но мне нравится, что даже при открытии этой двери имена файлов, то есть расширения, не имеют значения, тогда как другие ОС ...: D
Bananguin
@xralf: как вы пытаетесь редактировать файл? echo должен работать, но некоторые (большинство / все?) редакторы могут не работать, потому что это не настоящий редактируемый файл, а виртуальный в файловой системе proc.
Chmeee
@xralf не редактировать с VIM
ромашкой
@ warl0ck Я должен сделать это под rootучетной записью. Я добавил /path/to/в свою $PATHпеременную, и я могу запустить XX.exeиз командной строки, но по-прежнему не могу запустить его из dmenu. Извините, я ошибся xmobarв этом вопросе.
xralf
3

Убедитесь , что wineэто на своем пути и создать скрипт , содержащий следующее:

#!/bin/sh
wine "$HOME/.wine/drive_c/Program Files/TextAloud/TextAloudMP3.exe"

Дайте себе разрешение выполнить скрипт, запустив его chmod u+x SCRIPT_NAME.

Затем просто запустите этот скрипт из вашего файлового менеджера. Запустится wine, который запустит TextAloudMP3.exe.

Сообщество
источник
Я создал скрипт с именем textaloudв /usr/local/binпапке. Первая строка это #! /bin/bashвторая строка wine .... textaloud не появится в лаунчере xmobar. При запуске sh textaloudпишет$ sh textaloud wine: cannot find '~/.wine/drive_c/Program Files/TextAloud/TextAloudMP3.exe'
xralf
К сожалению. ~не расширяется до домашнего каталога пользователя, если он находится в двойных кавычках. Я изменил свой ответ, чтобы $HOMEвместо этого использовать переменную среды .
sh textaloudуже работает, но только из каталога, /usr/local/binи он все еще не виден в панели запуска xmobar.
xralf
1
Возможно, вы захотите добавить $@после имени программы, чтобы она передавала все аргументы. И я обычно помещаю такие сценарии в ~ / bin (после того, как удостоверился, что это в вашем PATH, конечно).
Wyatt8740
Не могли бы вы также определить псевдоним в ~/.bash_aliases?
Аарон Франке
3

Шаг 0

Установите двоичный путь для вашего пользователя. Запустите mkdir ~/binи добавьте этот каталог в ваш путь.

Как это сделать, зависит от используемой оболочки и среды рабочего стола.

Здесь вы можете найти, как изменить свой PATH в различных оболочках .

Проверьте этот решенный вопрос, если ваша среда рабочего стола не заботится о вашем профиле оболочки, а первый работает из терминала, но не из среды рабочего стола .

Шаг 1

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

Создайте короткий сценарий оболочки для запуска вашей программы Wine в этом каталоге, а именно ~/bin/textaloud:

#!/bin/bash
cd "~/.wine/drive_c"
exec wine "~/.wine/drive_c/Program Files/TextAloud/TextAloudMP3.exe" "$@"

И дать ему разрешение на выполнение.

chmod +x ~/bin/textaloud

Есть три вещи, чтобы отметить о вышеупомянутом сценарии:

  • cdПуть , где программа будет работать (в этом каталоге). Некоторые программы могут требовать, чтобы вы запускали их в определенном каталоге. Если у вас возникли проблемы с этим, установите этот каталог (обычно там, где находится исполняемый файл). Вы можете отменить эту строку в некоторых случаях.
  • Эти execкоманды говорят Башу трансформироваться в вино , со следующими параметрами, так что это больше не работает Баша вина, но процесс Баша становится вином. PID остается. У вас нет двух запущенных процессов.
  • Символ $@заменяется аргументами, которые вы запускали, если есть. Так что они передаются в вашу винную программу.

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

textaloud

Шаг 2

Создать приложение запуска. В настоящее время эти файлы стандартизированы как .desktopфайлы, и многие окружения рабочего стола предоставляют графические инструменты для их создания.

Вот пример скелета, который вы можете использовать, чтобы написать его самостоятельно. Вы можете предоставить значок (часто в формате PNG, SVG или XPM).

[Desktop Entry]
Type=Application
Name=TextAloud
Exec=textaloud
Icon=textaloud.png

Поместите этот файл в ~/.local/share/applications/TextAloud.desktop. Значки ищутся (среди других мест) в ~/.local/share/icons, поэтому обязательно найдите симпатичный значок для вашего приложения и поместите его там с именем textaloud.png.

После того, как вы это сделаете, среда вашего рабочего стола должна найти файл ярлыка и сможет запустить программу со сценарием. Если нет, перезагрузите или перезапустите его.

Алисия
источник
Спасибо, я попробовал ваше руководство, но последний шаг не работает. Я не вижу textaloudв dmenuлаунчере.
xralf
Шаг 2 направлен на рабочие столы, такие как GNOME, KDE или XFCE. Похоже, dmenu не заботится о файлах .desktop, поэтому с шагом 1 все будет в порядке. Это работало с терминала? Если это сработало, но все еще не работает, просмотрите Шаг 0. Может быть, вы используете, ~/.xsessionчтобы получить сессию X11? Попробуйте добавить туда export PATH="$HOME/bin:$PATH"перед строкой, которую вы используете для запуска dwm и перезапустите X11.
Алисия
В терминале работает без проблем. Путь в порядке. Только вопрос, чтобы быть полным, я хотел бы решить его из dmenu.
xralf
Я говорил тебе. У тебя есть ~/.xsession? Помните, что PATH вашего терминала может не совпадать с PATH вашего сеанса X11.
Алисия
$@должно быть в двойных кавычках для безопасности. так бы и стало exec wine "~/.wine/drive_c/Program Files/TextAloud/TextAloudMP3.exe" "$@".
Wyatt8740
1

Рассматривали ли вы попробовать PlayOnLinux? Он может позаботиться обо всем за вас, и даже вы можете настроить некоторые типы файлов, которые будут открываться программами Wine.

Bichoy
источник