Wine что за программа

а если всерьез, то погляди на форумах или в библиотеках сетевых отзывы о книгах своих любимых писателей (можешь даже поглядеть нелюбимых, но маститых классиков). Ты удивишься, однако хулительные отзывы встречаются и у них. 😉 Так что забей на общие выкрики, приглядись к сути высказываний и БУДЬ ПРОЩЕ 🙂

apt-get source wine1.3
patch .
dpkg-buildpackage
и пакеты будут нормальные, а не как через checkinstall

>>>Нестабильная работа на некоторых видеокартах.

ATI и интегрированные intel

>>>apt-get source wine1.3

patch .
dpkg-buildpackage
и пакеты будут нормальные, а не как через checkinstall

Источник: www.opennet.ru

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

Полное руководство по Wine: от установки до примеров использования

Оглавление

Установка Wine в Linux Mint и запуск Windows-приложения


Для чего Wine

Эта инструкция расскажет об использовании Wine. Данные советы по использованию применимы как к Kali Linux, так и к любому другому дистрибутиву Linux.

С помощью Wine можно запускать программы Windows прямо на Linux без использования виртуальных компьютеров. Если говорить о Kali Linux, то одним из интересных примеров является программа Router Scan by Stas’M, которая прекрасно работает через Wine (находит и взламывает роутеры, но не работают функции, связанные с использованием Wi-Fi адаптера).

Итак, Wine — это набор программ и библиотек, которые позволяют запускать Windows приложения в Linux без использования виртуализации. Конечно, Windows программы можно запустить в Linux с использованием VirtualBox, но такой вариант потребует запуска полноценной операционной системы с соответствующими затратами ресурсов, особенно оперативной памяти — для работы Windows необходимо несколько гигабайт памяти, а также место на диске для установки — несколько десятков гигабайт. При этом важным требованием для работы VirtualBox и аналогичных виртуальных компьютеров является то, чтобы ваш центральный процессор поддерживал виртуализацию.

Wine позволяет обойти все эти ограничения — для запуска программ Windows не нужно устанавливать эту операционную систему и приложениям для работы требуется всего несколько десятков мегабайт оперативной памяти.

Но у Wine есть и недостатки — не все приложения работают хорошо или вообще работают. Тем не менее огромное количество Windows программ прекрасно запускаются и работают в Linux благодаря Wine.

Помните, что многие бесплатные программы являются кроссплатформенными и вы можете их установить из стандартных репозиториев вашего дистрибутива. Для таких программ не нужен Wine. Примеры популярных кроссплатформенных программ: LibreOffice, Google Chrome, Firefox, Double Commander, VirtualBox, Etcher, VLC, DeadBeef, GIMP, OBS Studio, Viber, Wireshark, Apache, PHP, MySQL, Calibre, Netbeans, Burp Suite, Visual Studio Code, KeePass, KeePassXC, OpenShot Dropbox, Python, Ruby, Perl, PowerShell, SSH, Vuse BitTorrent Client, FileZilla, Tor Browser, JDownloader и очень многие другие. Всем этим программам не нужен Wine, поскольку они имеют «родные» установочные пакеты для Linux.

Программы из Windows на Linux. Wine для начинающих

Прежде чем пытаться установить и запустить программу через Wine, поищите её с помощью менеджера пакетов, например:

apt search OpenShot

Возможности и ограничения Wine

Программа способна запускать 64-битные, 32-битные, 16-битные программы и библиотеки Windows 9x/NT/2000/XP/Vista/7/8/10/11 и Windows 3.x

Поддержка Win32 API:

  • Поддержка игр и приложений на основе DirectX (поддержка Direct3D до DirectX 12)
  • Поддержка игр и приложений на основе OpenGL и Vulkan
  • Поддержка DirectShow с использованием GStreamer для кодеков
  • Direct2D, поддержка DirectWrite
  • Поддерживаются MMDevice API, XAudio, WinMM, DirectSound audio API.
  • Печать через драйвер PostScript в главную систему печати (обычно CUPS)
  • Драйвер расширенного метафайла (EMF) и метафайла Windows (WMF)
  • Desktop-in-a-box или смешанные окна

Позволяет программе Windows взаимодействовать с:

  • Графикой на основе X11, которая позволяет удалённо отображать на любом X-терминале
  • Графикой на базе macOS и Android
  • Шрифты X11, TrueType (.ttf/.ttc) и Windows Bitmap (.fon)
  • Звуковыми устройствами через ALSA, OSS, PulseAudio, Core Audio и т. д.
  • Многоязычной клавиатурой и поддержка метода ввода CJK через XIM
  • Модемами, последовательными устройствами
  • Сетями (TCP/IP и IPX)
  • Сканерами ASPI
  • Планшетами Windows через XInput (например, Wacom)
  • Устройствами видеозахвата через v4l2
  • Устройствами HID через IOHid (MacOS), evdev (Linux), hidraw (Linux), SDL2

Как вы можете увидеть, список впечатляющий и позволяет, к примеру, запускать игры для которых требуется DirectX и при этом выводить звук. Приложения из Wine могут работать с сетью и даже имеют доступ к некоторым аппаратным возможностям (принтеры, сканеры).

Если для работы приложения необходимы дополнительные библиотеки, например, Visual C++ Redistributable for Visual Studio, то их возможно установить в Wine и запускать приложение в среде с установленной этой библиотекой.

При этом нужно помнить о таком ограничении, как невозможность работать с устройствами напрямую, например, если для устройства требуется драйвер, то бессмысленно устанавливать Windows драйвер в Wine — вам нужно найти версию драйвер для Linux и установить её.

64-битный или 32-битный Wine?

В этой инструкции для установки Wine мы включим поддержку репозиториев для 32-битных платформ (i386) для того, чтобы скачать необходимые библиотеки. Может возникнуть вопрос, существует ли 64-битный Wine и если да, зачем нам подключать репозитории для i386 и скачивать 32-битную версию?

Да. 64-битный Wine доступен в Linux начиная с версии 1.2. Бинарные пакеты WineHQ доступны для 64-битных версий, и большинство основных дистрибутивов упаковывают их для пользователей. Обычно установка должна быть такой же простой, как установка пакета Wine для вашего дистрибутива через менеджер пакетов.

Но имеется несколько очень важных замечаний:

  • 32-битный Wine работает как в 32-битных, так и в 64-битных версиях Linux/Unix. На нём будут работать 16-битные и 32-битные приложения Windows.
  • 64-битный Wine работает только на 64-битных установках и пока что был тщательно протестирован только в Linux. Для запуска 32-битных приложений Windows требуется установка 32-битных библиотек. И 32-битные, и 64-битные приложения Windows (должны) работать с ним; однако есть ещё много ошибок.
  • Текущий Wine включает поддержку 64-битного Wine в Mac OS X; однако это не было тщательно проверено, и некоторые приложения могут никогда не работать из-за несовместимости ABI между Win64 и OS X.

Главное, что из этого следует — даже при установке 64-битного Wine необходимо активировать 32-битные репозитории, поскольку многие приложения Windows по-прежнему являются 32-битными и в любом случае необходимо установить 32-битные библиотеки, иначе многие программы просто не будут работать.

При установке можно явно выбрать пакет wine64, но даже если вы установите wine, то им будет 64-битная версия, если у вас 64-битный Linux.

Как установить Wine

Установка Wine в Debian, Kali Linux, Linux Mint, Ubuntu и их производные

Выполните следующие команды:

sudo dpkg —add-architecture i386 sudo apt update sudo apt install wine winbind

После установки запустите Wine — возможно, он предложит скачать необходимые шрифты и другие компоненты:

winecfg

Чтобы проверить версию Wine выполните команду:

wine —version

Установка Wine в Arch Linux

Откройте текстовый файл /etc/pacman.conf:

sudo gedit /etc/pacman.conf

В нём найдите и раскомментируйте строки (убедитесь, что раскомментировали обе строки, иначе изменения не вступят в силу):

[multilib] Include = /etc/pacman.d/mirrorlist

Обновите информацию о пакетах:

sudo pacman -Sy
sudo pacman -S wine wine_gecko wine-mono sudo pacman -S lib32-mpg123 lib32-gnutls

Как запустить программу в Wine

Запуск двойным кликом по исполнимому файлу

Для запуска Windows приложений в Linux обычно достаточно дважды кликнуть по ним. Но может быть так, что .exe файл будет открываться менеджером архивов или другим приложением (обычно менеджером архивов).

В этом случае кликните по файлу правой кнопкой мыши, выберите пункт «Открыть с помощью» и выберите Wine.

Если у вас в контекстном меню не появился Wine, то сделайте так:

  • нажмите правой кнопкой на приложение, которое хотите запустить
  • выберите «Открыть с помощью», а затем «Другое»

  • поставьте галочку «Пользовательская команда» и там, где строка для ввода, введите wine. Поставьте галочку «Сохранить ассоциацию» и «Установить как приложение по умолчанию», нажмите ОК. Теперь все .exe файлы будут открываться двойным кликом.

GNOME 3, Ubuntu

В Ubuntu ( GNOME 3) в контекстном меню отсутствует Wine и невозможно добавить пользовательскую команду. Для исправления выполните следующее:

sudo ln -s /usr/share/doc/wine/examples/wine.desktop /usr/share/applications/

Если столкнётесь с ошибкой, что файл wine.desktop отсутствует, то найдите его с помощью следующей команды и отредактируйте приведённую выше команду:

locate wine.desktop

Кликните правой кнопкой мыши по .exe файлу и выберите пункт, который называется «Открыть в другом приложении».

Затем выберите «Посмотреть все приложения».

Нажмите на «Wine — загрузчик Windows программ» и затем нажмите кнопку «Выбрать».

Обратите внимание, насколько экономно используется оперативная память — для работы Router Scan by Stas’M в Kali Linux нужен всего 1 мегабайт оперативной памяти. Если бы для запуска этой программы мы устанавливали Windows в виртуальную машину, то потребовалось бы несколько гигабайт для работы ОС. К тому же, при использовании Wine необязательно, чтобы процессор поддерживал виртуализацию — в отличие от VirtualBox и других аналогичных способов запуска виртуальных компьютеров.

Запуск в командной строке

Поскольку программы Windows часто ищут файлы относительного того места, откуда они были запущены, при использовании командной строки вы должны запускать их очень специфическим способом: «сменить каталог» на папку, в которой расположена программа, и запустить файл .exe, используя только его имя файла. Например:

cd ‘.wine/drive_c/Games/Tron’ wine tron.exe

Использование wine start

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

Вам нужно использовать wine start, если вы укажете полный путь к .exe, потому что это позволяет Wine установить рабочий каталог для программы, если он ей нужен.

Вы можете указать Wine путь в стиле DOS или Windows в одинарных кавычках, например:

wine start ‘C:GamesTrontron.exe’

Вы также можете использовать двойные кавычки, но вам нужны две обратные косые черты вместо одной:

wine start «C:\Games\Tron\tron.exe»

Если вы предпочитаете использовать путь в стиле Unix, используйте параметр /unix для запуска, например:

wine start /unix «$HOME/installers/TronSetup.exe»

Передача аргументов командной строки Windows

Если вы используете программу с аргументами в Windows, например:

quake.exe -map e1m1

То вы можете сделать то же самое в Wine, запустив:

wine quake.exe -map e1m1

То есть командная строка идентична, за исключением wine перед ней. Обратите внимание, однако, что вам может потребоваться экранировать некоторые специальные символы обратной косой чертой из-за того, как они обрабатываются в оболочке Linux. Например:

quake.exe -map C:Quakee1m1.bsp
wine quake.exe -map C:\Quake\e1m1.bsp

Запуск файлов .msi

Файлы MSI нельзя запускать напрямую; вам нужно использовать либо программу Wine msiexec, либо запуск Wine с терминала:

wine msiexec /i whatever.msi
wine start whatever.msi

Графическая среда Wine в стиле Explorer (Wine File Manager)

Если вы предпочитаете использовать графический интерфейс для управления файлами, возможно, вам стоит рассмотреть возможность использования winefile. Это приложение Winelib поставляется с Wine и может быть найдено с другими программами Wine. Это полезный способ просмотреть конфигурацию вашего диска и найти файлы, а также вы можете запускать программы прямо из Winefile. Обратите внимание, что многие функции ещё не реализованы.

Чтобы его открыть выполните:

winefile

Как в Wine File Manager настроить Избранное (Favorites) и добавить папки

Wine File Manager это аналог проводника Windows. Его можно открыть командой

winefile

Там вы можете увидеть несколько ярлыков и диски.

Среди ярлыков вы найдёте:

В My Computer собраны все диски, подключённые к Linux. Диск «C:» это то, что размещено в папке ~/.wine/drive_c/. Диск «Z:» – это корневой диск файловой системы Linux. Другие буквы — это подключённые к Linux флешки и диски.

Корневым элементов ярлыков является Desktop, то есть рабочий стол. Имеется ввиду рабочий стол Linux, а не Windows.

То есть если вы хотите, чтобы в Wine File Manager была видна новая папка, то создайте её на рабочем столе вашего Linux, например:

mkdir ~/Desktop/Favorites/

В эту папку вы можете скопировать любые файлы для быстрого доступа.

Также вы можете создавать ярлыки в этой папке на файлы и программы как в файловой системе Wine, так и за её пределами.

Команда для создания ярлыка:

ln -s TARGET DIRECTORY

Например, следующая команда создаст в папке ~/Desktop/Favorites/ ссылку на файл ~/.wine/drive_c/windows/notepad.exe:

ln -s ~/.wine/drive_c/windows/notepad.exe ~/Desktop/Favorites/

Чтобы добавить папки «Загрузки», «Видео», «Музыка» рядом с папкой «Документы» в дерево папок проводника Explorer вы можете создать соответствующие ссылки:

ln -s ~/Downloads/ ~/Desktop/ ln -s ~/Music/ ~/Desktop/ ln -s ~/Videos/ ~/Desktop/

Если вы хотите изменить буквы дисков, то запустите Wine configuration:

winecfg

И перейдите на вкладку Drives для настройки отображения дисков в Wine File Manager:

Как в Wine запустить файл .bat

Вы можете запустить файл .bat разными способами:

1. Выполните команду

winefile

Найдите файл .bat и запустите его двойным кликом.

2. Выполните команду

wine explorer

И найдите в окне Проводника нужный вам файл.

wine explorer /ПУТЬ/ДО/ПАПКИ

чтобы сразу попасть в нужную папку.

Когда найдёте файл .bat, то дважды кликните на него.

3. Вы можете запустить файл .bat в командной строке, используя конструкцию вида:

wine start /ПУТЬ/ДО/ФАЙЛА.bat

Если вы используете путь до файла в файловой системе Linux, то обязательно нужно указать опцию /unix.

Как установить программу в Wine и создать ярлык

Если программа является портативной, то вы можете поместить её в любое место на диске — необязательно в папку Wine. Кстати, по умолчанию диском C: в Wine является папка ~/.wine/drive_c/.

Как уже сказано, вам необязательно помещать файлы с программой именно туда. Вы можете запускать портативные программы показанными выше способами.

Если программа распространяется в виде установщика (инсталлятора), то просто запустите этот установщик с помощью Wine. В большинстве случаев всё пройдёт как в Windows, будет выполнена обычная установка и на рабочем столе вашей Linux и в меню появится ярлык для запуска программы.

Для портативной программой вы также можете сделать ярлык. Для этого кликните правой кнопкой мыши по рабочему столу и выберите пункт «Создать кнопку запуска здесь» (в Cinnamon), «Создать значок запуска» (в XFCE) или аналогичный пункт.

Обычно есть возможность установить иконку, в том числе присутствуют иконки программ, когда-либо запускаемых в Wine.

Даже если «мастер значка запуска» позволяет указать рабочий каталог, то лучше не полагаться на него. В качестве команды запуска укажите команду вида:

bash -c ‘cd /ПУТЬ/ДО/ПАПКИ/С/ФАЙЛОМ/; wine ./ФАЙЛ.exe’

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

К примеру, исполнимый файл находится в папке /home/mial/.wine/drive_c/Program Files (x86)/foobar2000/ и называется foobar2000.exe, тогда команда запуска следующая:

bash -c ‘cd «/home/mial/.wine/drive_c/Program Files (x86)/foobar2000/»; wine ./foobar2000.exe’

Обратите внимание, что:

  • указан абсолютный, а не относительный путь до папки
  • если в пути содержатся пробелы или другие специальные для оболочки символы (например, скобки), то они должны быть обязательно экранированы или путь должен быть помещён в кавычки.

Другой пример, когда файл находится не на диске Wine: нужно создать ярлык для запуска файла /mnt/disk_d/Share/Conses/ConsFed/cons.exe, тогда команда запуска следующая:

bash -c ‘cd /mnt/disk_d/Share/Conses/ConsFed/; wine ./cons.exe’

Если для работы программы необходима специальная версия Wine или дополнительные компоненты, то можно найти скрипты, которые упрощают их установку, о них будет позже в разделах, посвящённых PlayOnLinux и winetricks.

Встроенные в Wine программы

В Wine имеется несколько встроенных «стандартных программ Windows».

Источник: hackware.ru

Как работает Wine

Wine — это свободное программное обеспечение для запуска Windows-приложений на нескольких POSIX-совместимых операционных системах, включая Linux, macOS и BSD.

Если вы любите Linux, то наверняка когда-то запускали Wine. Возможно, для какой-то «важной» программы Windows, у которой нет аналога под Линуксом, или поиграться. Забавный факт: даже Steam Deck от Valve запускает игры через оболочку на основе Wine (она называется Proton).

За последний год я намучился с отладчиком, который позволяет одновременно дебажить и Wine, и Windows-приложение в нём. Разобраться во кишочках Wine оказалось очень интересно! Я-то раньше много им пользовался, но никогда не понимал механику целиком. Можно взять файл Windows — и просто запустить его в Linux без каких-либо изменений. Если вы хотите знать, как это сделано, добро пожаловать под кат.

Дисклеймер. В статье реальность сильно упрощается, а многие детали игнорируются. Текст даёт общее представление, как работает Wine.

Wine — не эмулятор!

Прежде чем разбираться в работе Wine, нужно сказать, чем он НЕ является. Вообще, W.I.N.E. — это рекурсивный акроним, который расшифровывается как «Wine Is Not an Emulator». Почему? Потому что есть куча отличных эмуляторов и для старых архитектур, и для современных консолей, а Wine принципиально реализован по-другому. Давайте вкратце рассмотрим, как вообще работают эмуляторы.

Представьте простую игровую приставку, которая понимает две инструкции:

  • push — пушит заданное значение в стек
  • setpxl — достаёт три значения из стека и рисует пиксель с цветом arg1 в точке (arg2, arg3)

> dump-instructions game.rom . # рисуем красную точку по координатам (10,10) push 10 push 10 push 0xFF0000 setpxl # рисуем зелёную точку по координатам (15,15) push 15 push 15 push 0x00FF00 setpxl

Бинарный файл игры (или картридж ROM) представляет собой последовательность таких инструкций, которые аппаратное обеспечение может загрузить в память и выполнить. Нативное железо выполняет их в натуральном режиме, но как запустить старый картридж на современном ноуте? Для этого делаем эмулятор — программу, которая загружает ROM из картриджа в оперативную память и выполняет его инструкции. Это интерпретатор или виртуальная машина, если хотите. Реализация эмулятора для нашей приставки с двумя инструкциями будет довольно простой:

enum Opcode < Push(i32), SetPixel, >; let program: Vec = read_program(«game.rom»); let mut window = create_new_window(160, 144); // Виртуальный дисплей 160×144 пикселей let mut stack = Vec::new(); // Стек для передачи аргументов for opcode in program < match opcode < Opcode::Push(value) => < stack.push(value); >Opcode::SetPixel => < let color = stack.pop(); let x = stack.pop(); let y = stack.pop(); window.set_pixel(x, y, color); >> >

Настоящие эмуляторы намного сложнее, но основная идея та же: поддерживать некоторый контекст (память, регистры и т.д.), обрабатывать ввод (клавиатура/мышь) и вывод (например, рисование в каком-то окне), разбирать входные данные (ROM) и выполнять инструкции одну за другой.

Разработчики Wine могли пойти по этому пути. Но есть две причины, почему они так не поступили. Во-первых, эмуляторы и виртуальные машины тормозные по своей сути — там огромный оверхед на программное выполнение каждой инструкции. Это нормально для старого железа, но не для современных программ (тем более видеоигр, которые требовательны к производительности). Во-вторых, в этом нет необходимости! Linux/macOS вполне способны запускать двоичные файлы Windows нативно, их нужно только немного подтолкнуть…

Давайте скомпилируем простую программу для Linux и Windows и сравним результат:

int foo(int x) < return x * x; >int main(int argc)

Слева — Linux, справа — Windows

Результаты заметно отличаются, но набор инструкций фактически один и тот же: push , pop , mov , add , sub , imul , ret .

Если бы у нас был «эмулятор», который понимает эти инструкции, то смог бы выполнить обе программы. И такой «эмулятор» существует — это наш CPU.

Как Linux запускает бинарники

Прежде чем запускать чужеродный двоичный файл, давайте разберёмся, как запускается под Linux родной бинарник.

❯ cat app.cc #include int main() < printf(«Hello!n»); return 0; >❯ clang app.cc -o app ❯ ./app Hello! # работает!

Довольно просто, но давайте копнём глубже. Если сделать .app ?

❯ ldd app linux-vdso.so.1 (0x00007ffddc586000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f743fcdc000) /lib64/ld-linux-x86-64.so.2 (0x00007f743fed3000) ❯ readelf -l app Elf file type is DYN (Position-Independent Executable file) Entry point 0x1050 There are 13 program headers, starting at offset 64 Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flags Align PHDR 0x0000000000000040 0x0000000000000040 0x0000000000000040 0x00000000000002d8 0x00000000000002d8 R 0x8 INTERP 0x0000000000000318 0x0000000000000318 0x0000000000000318 0x000000000000001c 0x000000000000001c R 0x1 [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2] .

Самое главное, что .app — это динамически исполняемый файл.

Он зависит от некоторых динамических библиотек и требует их присутствия в рантайме. Иначе не запустится. Другой интересный момент — запрос интерпретатора ( requesting program interpreter в последней строке листинга). Какой ещё интерпретатор? Я думал, что C++ — компилируемый язык, в отличие от Python…

В данном контексте интерпретатор — это «динамический загрузчик». Специальный инструмент, которая запускает исходную программу: разрешает и загружает её зависимости, а затем передаёт ей управление.

❯ ./app Hello! # Работает! ❯ /lib64/ld-linux-x86-64.so.2 ./app Hello! # Тоже работает! # Домашнее задание: запустите это и попробуйте понять смысл выдачи. ❯ LD_DEBUG=all /lib64/ld-linux-x86-64.so.2 ./app

При запуске исполняемого файла ядро Linux определяет, что файл динамический и требует загрузчика. Затем оно запускает загрузчик, который выполняет всю работу. Это можно проверить, если запустить программу под отладчиком:

❯ lldb ./app (lldb) target create «./app» Current executable set to ‘/home/werat/src/cpp/app’ (x86_64). (lldb) process launch —stop-at-entry Process 351228 stopped * thread #1, name = ‘app’, stop reason = signal SIGSTOP frame #0: 0x00007ffff7fcd050 ld-2.33.so`_start ld-2.33.so`_start: 0x7ffff7fcd050 : movq %rsp, %rdi 0x7ffff7fcd053 : callq 0x7ffff7fcdd70 ; _dl_start at rtld.c:503:1 ld-2.33.so`_dl_start_user: 0x7ffff7fcd058 : movq %rax, %r12 0x7ffff7fcd05b : movl 0x2ec57(%rip), %eax ; _dl_skip_args Process 351228 launched: ‘/home/werat/src/cpp/app’ (x86_64)

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru