Вопрос или проблема
Например, у меня есть приложение (игра) с разрешением 640×480. У меня есть 2 варианта: запустить его в оконном режиме, оно будет размером 640×480, или включить полноэкранный режим, и оно займет весь экран.
Я хочу изменить размер приложения без включения полноэкранного режима (например, до 1024×768).
На данный момент я попробовал 2 решения:
-
Включить ‘Эмуляция виртуального рабочего стола’ в
winecfg
. Сначала это запускает рабочий стол с тем разрешением, но когда я включаю полноэкранный режим в приложении, рабочий стол сжимается до 640×480. -
Запустить Wine на внутреннем X-сервере:
Xephyr -ac -br -noreset -screen 1024x768 :1.0 & ZEPHYR_PID=$! sleep 1 DISPLAY=:1.0 wine game.exe kill $ZEPHYR_PID
Та же проблема здесь: окно изменяет размер, когда я включаю полноэкранный режим.
Я всегда играю в полноэкранном режиме, я сделал свои скрипты для изменения разрешения и частоты обновления монитора, потому что использую неправильную частоту. На моем мониторе появляется плавающее окно с сообщением “Вход не разрешен”. Чтобы исправить это, я использую что-то вроде следующего:
Это для “Ace Of Spades”
#!/bin/bash
# Исправление разрешения
echo `xrandr --current | grep current | awk '{print $8}'` >> /tmp/width
echo `xrandr --current | grep current | awk '{print $10}'` >> /tmp/height
cat /tmp/height | sed -i 's/,//g' /tmp/height
WIDTH=$(cat /tmp/width)
HEIGHT=$(cat /tmp/height)
rm /tmp/height /tmp/height
echo "$WIDTH"x"$HEIGHT" >> /tmp/Resolution
Resolution=$(cat /tmp/Resolution)
rm /tmp/Resolution
# Исправление разрешения
BINARY="$HOME/.wine/drive_c/Ace of Spades/client.exe"
$(wine "$BINARY" -"$@" "%u") &
xrandr -s 800x600 -r 77
sleep 2
BINARYPID=$(pidof $BINARY)
taskset -p 0xFFFFFFFF $BINARYPID &
while Launchers=$(pidof "client.exe")
do
sleep 1
done
xrandr -s $Resolution -r 63
exit 0
В резюме этот скрипт предназначен для запуска Ace Of Spades, из “mimetype” и серверов из веб-браузера для протокола “aos://”, это другой тип конфигурации, я здесь не объясняю.
Это запускает игру, после ее запуска разрешение монитора меняется на 800×600, пока я не закрою игру. Когда я закрываю игру, мое разрешение восстанавливается.
Начиная с WINE 10.0 (или даже раньше: я тестировал это на 9.22), появилась экспериментальная опция расширения приложений, запрашивающих более низкое разрешение до родного.
Доступен новый механизм эмуляции изменения режима отображения. Он все еще очень экспериментален, но может использоваться для принудительной эмуляции изменений режима отображения, вместо фактического изменения настроек дисплея.
Окна при необходимости дополняются и масштабируются, чтобы вписаться в физический дисплей, как если бы разрешение монитора было изменено, но фактический запрос изменения режима не происходит, улучшая пользовательский опыт.
Пожалуйста, имейте в виду, что это экспериментально, поэтому, если вы заметите какие-либо проблемы с приложениями, попробуйте отключить эту функцию.
С этим разобрались, я только что протестировал это с Alien Shooter 2 с разрешением 800×600, и у меня все работает нормально.
-
Выполните
wine control
, перейдите в “Настройки отображения” и установите “✓ Эмулировать изменения режима дисплея (требуется перезапуск)”. НажмитеOK
и закройте окна. -
Выполните
wineserver -k
(“требуется перезапуск” значит, что нужно перезапустить службы wine. Эта команда завершает их работу, поэтому в следующий раз, когда вы запустите wine, они будут начаты заново).
Ответ или решение
Настройка фиксированного разрешения экрана для приложений в Wine может быть проблемой, особенно когда речь идет о приложениях, таких как игры, с устаревшими или фиксированными разрешениями, например 640×480. В данной ситуации можно использовать несколько подходов, чтобы добиться нужного разрешения экрана без необходимости перехода в полноэкранный режим. В этой статье мы рассмотрим несколько методов и предложим решения для оптимизации отображения старых приложений в Wine.
Теория
Wine, обеспечивая совместимость с Windows-приложениями на системах Unix, предлагает несколько инструментов и функций для управления отображением и настройки разрешения. Прежде всего, важно понимать, что основная задача Wine — запускать приложения Windows, что иногда может вызвать некоторые дисплейные проблемы, особенно с приложениями, которые были разработаны для работы на специфичных версиях Windows или на строгих разрешениях экрана.
Одним из таких решений является функция "Эмуляция виртуального рабочего стола", доступная в winecfg
. Эта функция позволяет запускать приложение внутри окна определенного размера, что могло бы казаться оптимальным решением. Однако, как вы отметили, это приводит к сжатию виртуального рабочего стола до минимального разрешения приложения при переходе в полноэкранный режим.
Другой метод — использование Xephyr или другого похожего X-сервера. Xephyr позволяет запускать Wine в дополнительном X-сервере с фиксированным разрешением. Однако и здесь происходит автоматическое изменение размера окна при активации полноэкранного режима.
Пример
Как показано на примере, представленном в вопросе, существует скрипт, который использует команду xrandr
для изменения разрешения до 800×600 перед запуском игры и возвращает разрешение к исходному состоянию после выхода из приложения. Это интересный и рабочий способ, но он изменяет реальное разрешение монитора, что может не всегда подходить, особенно если хочется избежать мерцания экрана или других визуальных аномалий, связанных с изменением режима дисплея.
Кроме того, для версии Wine 10.0 и выше появилась экспериментальная функция "эмулирующих изменения режима дисплея". Эта функция обрабатывает запросы на изменение разрешений без фактического изменения настроек экрана, растягивая и масштабируя окна, чтобы они вписывались в физический дисплей. Это может значительно улучшить пользовательский опыт, поскольку избегает значительных изменений в работе системы.
Применение
Для настройки приложения в Wine с фиксированным разрешением экрана, следуйте следующим шагам:
-
Эмуляция виртуального рабочего стола в Wine:
- Откройте
winecfg
. - Перейдите на вкладку "Графика".
- Включите "Эмулировать виртуальный рабочий стол" и установите желаемое разрешение, например, 1024×768.
- Откройте
-
Использование Xephyr:
- Установите Xephyr (при необходимости).
- Запустите Xephyr с командой:
Xephyr -ac -br -noreset -screen 1024x768 :1.0 & DISPLAY=:1.0 wine game.exe
- Убедитесь, что полный путь до вашего исполняемого файла указан правильно.
-
Эмуляция изменений режима дисплея:
- Перейдите в Wine Control Panel, набрав в терминале
wine control
. - В разделе настроек экрана активируйте "Эмулировать изменения дисплея".
- Перезапустите Wine, выполнив
wineserver -k
.
- Перейдите в Wine Control Panel, набрав в терминале
Заключение
Каждое из этих решений может подойти для определенной ситуации и конфигурации системы. Однако, необходимо учитывать экспериментальность некоторых функций и возможные сбои в работе приложений при их использовании. В процессе настройки важно тестировать каждое изменение, чтобы находить наиболее комфортные и ожидаемые настройки в работе приложения. В результате, данные решения должны помочь добиться оптимального отображения приложения на современных дисплеях без излишнего влияния на систему в целом.