LINUX.ORG.RU

Alt+Tab в играх на линуксе

 


2

1

Проблема, в общем, сто раз перетиралась и не стоит выеденного яйца. Вот тут (http://forum.ubuntu.ru/index.php?topic=17000.15) парни добавляют пару строчек в конфиг иксов и большая часть игр начинает нормально сворачиваться из полноэкранного режима. Другие запускают игры в отдельных иксах, что мне, кстати, нравится больше. Но, если я все правильно понял, большинство разработчиков дистрибутивов проблему игнорят - типа «игр на линуксе нет, как не было в СССР секса». На фоне этого у меня возникает вопрос, есть ли дистрибутив, который изначально и в обязательном порядке всегда реагирует на alt+tab в полноэкранных приложениях? И вопрос номер два, какое решение, все-таки, самое адекватное для такой и задачи и какой метод решения проблемы стоит предложить разработчикам основных дистров?

★★★

Зпускаю в окне без рамки, растянутом на весь экран. УМВР.

Dragon59 ★★ ()
Ответ на: комментарий от Dragon59

Т.е по виду - фуллскрин, но при этом можно переключать как обычное окно.

Dragon59 ★★ ()

На фоне этого у меня возникает вопрос, есть ли дистрибутив, который изначально и в обязательном порядке всегда реагирует на alt+tab в полноэкранных приложениях?

в принципе, отдельные иксы из коробки поддерживает любой дистрибутив с KDE, (Меню Пуск^WKDE->Выход->Переключить пользователя), и переключение будет по Ctrl+Alt+F7/F8. Только это не рационально будет запускать целое KDE для одного полноэкранного приложения

TheAnonymous ★★★★★ ()

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

waker ★★★★★ ()

Отмечусь, чтоб ссылку не потерять, авось пригодится. Кстати, для отдельных иксов есть xlaunch, берёт на себя почти всю рутину.

false ★★★★★ ()

Я думаю надо просто добавить во все дистры скрипт xlaunch, в DE которая создаёт значки на рабочем столе сделать опцию «запуск на отдельном X-сервере».

rezedent12 ☆☆☆ ()
Ответ на: комментарий от Opeth
$ pacman -Qi xlaunch 
Name           : xlaunch
Version        : 20070607-2
URL            : https://forums.gentoo.org/viewtopic-t-483004.html
Licenses       : GPL2
Groups         : None
Provides       : None
Depends On     : bash  xorg-xinit
Optional Deps  : None
Required By    : None
Conflicts With : None
Replaces       : None
Installed Size :  16,00 KiB
Packager       : Unknown Packager
Architecture   : any
Build Date     : Ср. 18 июля 2012 20:57:28
Install Date   : Ср. 18 июля 2012 20:57:41
Install Reason : Explicitly installed
Install Script : No
Description    : Bash script to launch programs on different
                 displays

УМВР.

ados ★★★★★ ()
Ответ на: комментарий от false

У отдельных иксов есть минус - застывают некоторые другие иксовые приложения. То есть я переключаюсь на игру в других иксах - могут заглючить некоторые плееры, Pidgin рвёт соединения по таймауту и т. д. Это связанно с тем, что иксам нужен монопольный доступ к видео-карте и когда мы переключаемся на другую виртуальную консоль иксы теряют возможность рендеринга, а значит все не многопоточные приложения будут ждать ответа от сервера, который будет получен только после возврата в эти иксы. Это не теория, а просто попытка объяснить практическое наблюдение. Вы можете и сами проверить:

1) Запустите OpenArena в обычных иксах. Создайте сервер из гуя и пригласите туда ещё игроков.

2) Переключитесь в другую виртуальную консоль (да хотя бы Ctrl + Alt + F1). Подождите немного (эффект должен быть заметен сразу, но чтобы было совсем явно лучше подождать 10-20 секунд).

3) Вернитесь в иксы и наслаждайтесь чтения сообщений «лаги!!!11» в перемешку с матом от других игроков. На момент переключения сервер полностью перестал принимать команды и отдавать данные.

Это лишь наглядный пример. Заглючить могут самые разные приложения.

Поэтому отдельный X-сервер это зло и костыль.

KivApple ★★★★★ ()
Section "ServerFlags"
        Option "AllowDeactivateGrabs" "True"
EndSection

И теперь чтобы переключиться из «полноэкранной программы» проделываем: 1. ctrl+alt+/ (здесь / - клавиша деления на дополнительной цифровой клавиатуре) 2. alt+tab Чтобы обратно - досаточно передать фокус программе. Дальше зависит от неё самой - сможет ли она корректно восстановить захват клавиатуры.

А что делать, если у меня ноутбук и у него нет дополнительной цифровой клавиатуры? Более того, нет и её эмуляции с помощью клавиши Fn.

KivApple ★★★★★ ()
Ответ на: комментарий от KivApple

Идея ясна. А можно эту задачу все таки решить относительно стабильным и надежным путем? Если так - я предложил бы на лоре обтестить его на разных дистрах и, если все ок, то обратиться к ключевым дистростроителям с фичариквестом принять метод как дефолтный

Opeth ★★★ ()
DISPLAY=:1 xinit /usr/bin/urbanterror -- :1

и даже

DISPLAY=:1 xinit /usr/bin/wine ./Wiz8.EXE -- :1
спасёт отца...

fuxter ()

У меня любое окно по-умолчанию можно свернуть Ctrl+Alt+d.

Alt+Tab работает не везде.

Nxx ★★★★★ ()
Ответ на: комментарий от fuxter

Это локальное решение. Думаю, что-то подобное должно делаться на уровне дистростроителей.

Opeth ★★★ ()

Спасибо добрый человек, что напомнил про отдельный X-сервер, хоть и костыль, но зато KoTOR нормально работает

ЗЫ осталось найти способ туда запихать трей, или хотябы напоминания о сообщениях в скуп/джаббер и прочее

Dred ★★★★★ ()
Ответ на: комментарий от geekless

Разработчик KWin прямо сказал - идите в жопу с такими feature requests.

«WM в X.org ничего не знает про разрешение экрана».

juk4windows ()
Ответ на: комментарий от juk4windows

Разработчик KWin — истина в последней инстанции?

«WM в X.org ничего не знает про разрешение экрана».

Да нет, это просто «разработчик KWin» ничерта не знает про XRandr.

Схема на самом деле простая, как два пальца:

  • Приложение выставляет своему окну свойство, содержащее требуемое разрешение. Например, _NET_WM_REQUIRED_SCREEN_SIZE=«1200x1024».
  • Когда такое окно получает фокус, WM выставляет указанное разрешение экрана через XRandr.
  • Когда окно теряет фокус, WM возвращает дефолтное разрешение экрана.

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

Нативные игры пропатчить на использование _NET_WM_REQUIRED_SCREEN_SIZE вместо прямых вызовов XRandr. Также пропатчить Wine, что автоматически даст поддержку во всех играх, в нём запускаемых. Профит.

geekless ★★ ()
Ответ на: комментарий от geekless

Да нет, это просто «разработчик KWin» ничерта не знает про XRandr.

А разве xrandr в нужном объёме гарантирован?

x3al ★★★★★ ()
Ответ на: комментарий от x3al

А если не гарантирован, как вообще переключить разрешение?

geekless ★★ ()
Ответ на: комментарий от geekless

Приложение выставляет своему окну свойство, содержащее требуемое разрешение. Например, _NET_WM_REQUIRED_SCREEN_SIZE=«1200x1024»

Это кстате было бы бодро. Странно, что никто еще не реализовал.

anonymous ()
Ответ на: комментарий от geekless

_NET_WM_REQUIRED_SCREEN_SIZE=«1200x1024».

Теперь убедите X.org разработчиков добавить фичу, которую они сами не придумали и которая им нафиг не сдалась.

Всё это в Windows 18 лет как реализовано через CDS_FULLSCREEN флаг, но кому нафиг сдался Linux для игр? (Я уже молчу, что есть и другие приложения, которым хочется в полный экран с неродным разрешением).

ChangeDisplaySettings function

The ChangeDisplaySettings function changes the settings of the default display device to the specified graphics mode.

dwflags [in]

CDS_FULLSCREEN - The mode is temporary in nature. If you change to and from another desktop, this mode will not be reset.

И не надо мучить тогда разработчиков WM и Wine.

Всё это реализуется силами только X.org за полчаса (сделать аналог CDS_FULLSCREEN, но по умолчанию) - но вы же не будете писать патчи, да?

juk4windows ()
Ответ на: комментарий от juk4windows

Теперь убедите X.org разработчиков добавить фичу, которую они сами не придумали и которая им нафиг не сдалась.

При чем здесь разработчики X.org? Они не пишут ни WMы, ни Wine.

Вам дан в иксах универсальный механизм, остальное X.org-а не касается. Вы тупы? Вы не знаете, что такое свойства окон?

Всё это в Windows 18 лет как реализовано через CDS_FULLSCREEN флаг, но кому нафиг сдался Linux для игр? (Я уже молчу, что есть и другие приложения, которым хочется в полный экран с неродным разрешением).

В винде слиты воедино оконный менеджер и рисовка графики. Вот оконный менеджер и должен заниматься этим флагом.

Всё это реализуется силами только X.org за полчаса (сделать аналог CDS_FULLSCREEN, но по умолчанию)

Вот как раз средствами X.org это нихрена не реализуется, ни за полчаса, ни за полгода. Хотя вы можете и дальше жрать кактус и писать письма на деревню дедушке в багтрекер. Такой патч никогда не примут в X.org, потому что он реализует политику, а не механизм. Политики реализуются в WM. Xorg предоставляет только механизмы.

но вы же не будете писать патчи, да?

Мне делать что ли больше нехрен? Фича нужна вам, а писать должен я? Вот сами и пишите. С меня хватит того, что я вам объясняю, как это можно сделать.

geekless ★★ ()
Ответ на: комментарий от geekless

потому что он реализует политику, а не механизм

Политика неправильная, нелогичная, и 100% пользователей её ненавидят.

Ещё аргументы? :-)

juk4windows ()
Ответ на: комментарий от geekless

Фича нужна вам, а писать должен я?

Вы положили *** на Линукс и гордитесь этим? Прекрасно.

Я вот патчи пишу, когда могу и где могу, в багзилках сижу, critical ошибки в ядре Линукса нахожу.

Каждому своё, только странно, что вы этим вообще гордитесь. Я бы на Вашем месте вежливо промолчал. На это же анонимность и всё такое.

Кстати, да, зачем я с Вами общаюсь? Вы непрофильный к Линуксу человек, судя по всему.

juk4windows ()
Ответ на: комментарий от juk4windows

Политика неправильная, нелогичная, и 100% пользователей её ненавидят.

Я сказал, как починить. Вперёд с песнями.

geekless ★★ ()
Ответ на: комментарий от juk4windows

Вброс не засчитан. Я пишу патчи на фичи, которые мне нужны. В игры играете вы, вы патчи на эту фичу и пишите. Это опенсорс, парень.

geekless ★★ ()
Ответ на: комментарий от geekless

да, круто, опять разрабы WM'ов должны патчить свои детища чтобы обойти убогость иксов

anonymous ()
Ответ на: комментарий от geekless

Спасибо за пример реализации. Я не программист, но, в теории получается довольно красиво. Вообще, мне кажется, вы правы, такие вещи должны реализовывать те, кто занимается разработкой WM/Иксов. Как вы думаете, как лично я мог бы добиться реализации этой фичи? Допустим, даже если я написал бы патч, чего я сделать не смог бы в силу отсутствия знаний и опыта, я мог бы даже запостить его, но до интеграции его в стабильный билд исов могли бы пройти годы. Может, мне стоит обратиться к ним в рассылку? И, если да, то что конкретно и как конкретно предложить им это реализовать? Да, и можно ли обойтись одними иксами, чтобы решение было универсальным для всех WM?

Opeth ★★★ ()
Ответ на: комментарий от Opeth

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

При чем тут иксы? В иксах вам не нужно менять ни строчки кода.

[что делать]

  • Составляем описание протокола на английском.
  • Делаем патчи на пару WM-ов.
  • Делаем патч на Wine.
  • Пишем проникновенное письмо в рассылку разрабам WM-ом, Wine-а, а также в FD.O, содержащее мотивацию этой фичи и 3 предыдущих пункта. Убежденные силой пламенного слова, FD.Oшники включают вашу спеку в свой список стандартов, а разрабы программ принимают патчи.

Я бы не имея на руках патчей, чтобы можно было «на пальцах» показать работу фичи, не стал бы писать никуда. Что лично вы можете сделать, я не знаю. Разве что рублём простимулировать того, кто может выполнить такие пункты.

Да, и можно ли обойтись одними иксами, чтобы решение было универсальным для всех WM?

Я в 100500 раз повторяю: иксы тут вообще ни при чем. Иксы смысла ваших действий с окнами не знают и знать не должны. Вся няшная работа приложений в иксах, начиная от рамочек окон и заканчивая копированием текста в редакторе держится на том, что приложения соблюдают протоколы взаимодействия друг с другом.

geekless ★★ ()

А меня вот наоборот достало, что в OpenSuSE 12.x с KDE 4.x из полноэкранного Sauerbraten выкидывает в другое приложение по Alt-Tab. То есть проблем переключиться нет. Единственное, когда может не сработать - если нет других окон приложений открытых.

Так что попробуйте OpenSuSE с KDE :)

saper ★★★★ ()
Ответ на: комментарий от saper

Люблю немцев, молодцы :-) В отличие от русского линукс-юзера, который все-равно держит под рукой рабочую винду, эти покупают себе SUSE (или ставят Open) и реально ей пользуются, попутно решая возникающие проблемы

Opeth ★★★ ()
Ответ на: комментарий от juk4windows

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

anonymous ()
Ответ на: комментарий от anonymous

Присоединяюсь, не багрепорт, а сплошные сопли. Еще и не стыдно такое показывать.

unlog1c ★★★ ()
Ответ на: комментарий от Opeth

Ничего конструктивного, автор трижды применяет дурацкий шантаж «я устал, я мухожук». Единственный вменяемый коммент - что это надо фиксить, но непонятно где. Но в этом я склонюсь к мнению geekless.

unlog1c ★★★ ()
Ответ на: комментарий от unlog1c

Понял, спасибо, на досуге почитаю-откомменчю.

Opeth ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.