Игровой сетап на linux
Хотел я написать о багах и разработчиках но подумал, что это никому не надо и напишу о том как я настроил себе удобное место для поиграть на linux.
Какое-то время назад купил проектор Epson EF-12. Вещь, просто класс. Это трехметровый телек, зависит от расстояния до стены. Проектор лазерный и потому цветопередача у него просто великолепная, я сравнивал с проектором Xgimi halo plus. Прям купил оба и один вернул в магазин. Когда видишь две картинки рядом, сразу понятно насколько лазерный проектор с 3lcd технологией превосходит аналоги. Другие лазерники стоят намного дороже и большие, выбрал этот. Причем обложка для статьи снята днем с прикрытой шторой, так что на деле изображение лучше. Но то дело вкуса во многом конечно.
Есть и проблемы. У этого проектора перестает работать блютус после сна. Поддержка epson на это не отвечает. Приходится перегружать. Так же недостаток этого проектора в том, что он "не игровой" то есть если его к компу подрубить по HDMI то input lag будет заметный, при этом играбельный, но у меня еще он и далеко от компа, так что нужен HDMI удлиннитель (в моем случае радио удлиннитель дает +20мс задержки, но это по словам китайцев-авторов), от которого задержка становится такой, что играть так совершенно невозможно. С коротким проводом вполне играбельно, но это в моем случае невозможно. На том я поначалу и успокоился, просто смотрел кино на большом телеке и был доволен. Но нашелся таки способ играть на неигровом проекторе. Это Steam Link, который программа, а не железка, просто ставится на андроиде из Goole Play.
У меня довольно много игр куплено по скидкам в стиме, иногда я играю на компьютере, но редко. По сути Steam Link это штука, которая делает то же самое, что Google Stadia или Geforce Now, но трансляция идет с вашего компьютера. После долгих выбираний настроек я таки выяснил как сделать чтобы задержки были не заметны и все стало удобно. Настройки самого Steam Link элементарны их там несколько всего, разберетесь, остальное нужное далее опишу.
Вопервых у меня стоит видеокарта Nvidia RTX 3080 16Gb. Она умеет захватывать картинку с помощью nvfbc или nvenc, что не грузит проц совсем. Это можно покрутить чтобы посмотреть, что быстрее. Это поддерживается в Steam Link. Во-вторых мне пришлось подключить проектор к одной локальной сети с компьютером. Причем я сделал это на 5Ггц wifi, так как проектор не имеет возможности проводного подключения. 5Ггц тут нужно чтобы wifi каналы были свободные от соседей. Причем по wifi у меня подключен к роутеру на 5ГГц только проектор, а все остальные устройства на 2.4Ггц чтобы у проектора был свободен весь канал и была скорость 100Мбит. Комп подключен к роутеру проводом. Этой скорости достаточно чтобы была идеальная картинка в играх. В противном случае она будет заметно портиться, но работать будет и поначалу я так и играл. Steam Link захватывает картинку видеокартой, жмет ее ей же и передает на клиента, там разжимает и показывает.
После этого я выбрал и купил себе геймпад. Это PS5 Dualsense. Начиная с ядра 5.12 в linux есть драйвер для этого геймпада. Сам геймпад подключается не к проектору (хотя так можно), а к ноутбуку по bluetooth чтобы вопервых были минимальные задержки, а во-вторых работала вибрация в геймпаде. Да, даже вибрация работает в linux. К ноутбуку же подключен звук. Steam Link умеет отдавать звук на клиент и захватывать геймпад на клиенте отдавая на комп, но это не нужно, чтобы не гонять все это по сети и не тратить канал портя картинку. Плюс лаг и косяки в звуке будут при плохой связи. Мало того Steam поддерживает интеграцию с этим геймпадом и если нажать кнопку PS на нем, он откроет Big Picture режим специально для телевизора-проектора. В итоге в настройках Steam Link был запрещен захват звука на сервере и геймпада на клиенте.
После того как все было подключено возникла одна большая проблема. Разрешения на ноутбуке и проекторе разные. Для того чтобы все транслировалось как надо пришлось заходить в настройки игры и делать ее запуск в окне с разрешением 1920х1080 как на проекторе. Тогда Steam Link понимает, что надо захватывать конкретное окно и показывает все идеально. Это делается только при первом запуске игры, не очень удобно конечно. В целом и не всегда надо, но в противном случае он будет запускать игры с нативным разрешением монитора моего ноута 2560х1600, что на проекторе не надо, а производительность ест.
Самого же разрешения в 1080p совершенно достаточно, я никаких огрехов не вижу, хотя долго думал до покупки, что надо 4k, так вот 4k нафиг не надо, большая часть фильмов в 1080p и игры тоже на него заточены примерно, в любом случае никаких "пикселей" на стене при проецировании не видать. Мало того при таком маленьком разрешении все красиво и при этом еще и производительность в играх просто так не жрется.
Сначала было подумал, что удобно будет иметь два монитора, один headless для стима и игр, который транслируется на проектор, второй с мышкой и рабочим софтом. Чтобы не возиться с настройками купил затычку для HDMI порта (5$), которая эмулирует телек с любым разрешением (Easydiy HDMI Dummy plug) и просто сделал чтобы все игры запускались на этом виртуальном мониторе. Но оказалось, что это неудобно. Было бы отлично, но есть масса проблем с фокусом окон, геймпадом и пр. Так как xserver не расчитан на то что на одном мониторе будут играть с геймпадом, а на втором работать с мышкой одновременно. Возиться слишком долго не захотел. Так что так и оставил автозапуск свернутого в системный лоток стима с одним монитором на ноутбуке, все прекрасно работает.
Что касается игр на linux в Steam, то у меня одна как-то не запустилась (Forza Horizon), больше никаких проблем не видел. Даже Cyberpunk 2077 прошел спокойно пару раз. Прошел не на этом сетапе подчеркну. Все работает отлично. Proton от Steam это конечно супер. Виндой я не пользуюсь уже лет пятнадцать, так что приятно, что игры стали так просто работать в linux, давно ни во что не играл.
В итоге процесс включения игры сейчас таков:
1. С пульта проектора запустить Steam Link клиент.
2. Выбрать геймпадом игру, так как Big Picture включится на ноутбуке сам и покажется на проекторе как только Steam Link подключится, а гемпад подключится к ноутбуку сам как только на нем нажата PS кнопка.
3. В первый раз приходится зайти в настройки игры и сделать чтобы запускалась в окне с разрешением 1920х1080.
4. Играть.
Нужно признать, что с некоторыми играми есть проблемы вроде зайти в настройки и выбрать нужное разрешение, или еще что то подобное, но мало совсем. В стиме сразу написано, что игра не поддерживает геймпад, и я не вожусь с ремаппингом кнопок и прочими выкрутасами, нет и нет. Но таких игр мало и я просто в них не играю или на ноуте играю иногда, это разного рода Tactical RPG, которых на консолях не бывает просто. Иногда подумываю купить трекпад и кейпад чтобы в этом сетапе играть в клавамышные игры развалясь в гамаке, но пока не надумал, не уверен, что это будет удобно, в этом смысле геймпад конечно удобно держать в руках.
Приставочные игры работают в таком сетапе идеально все, что я пробовал. С учетом того что полный сетап PS5 стоил когда то еще 70к (не слежу за ценами), а игры на нем намного дороже чем в Steam, этот сетап проектор+геймпад намного дешевле, а в моей библиотеке много купленных по скидке за 2-15Eur игр, такая коллекция на PS5 стоила бы целое состояние, плюс всегда можно добавить в Steam игру, установленную на стороне, если вы понимаете о чем я, но я этим никогда не пользовался. Ну, и да, ноут у меня топовый, тут не знаю какое надо железо чтобы так хорошо работало.
P.S. никаких сложных махинаций и трехкилометровых команд для игр на linux не будет, не надо это все больше, отдыхайте, игры это ведь развлечение. Но геймпад для меня что-то новое после клава-мыши, очень непривычно. Если же будет желание решать проблемы с двумя мониторами (не один где два вместе, а именно два отдельных в xorg.conf), то вот часть решений:
1. Если будет моргать Big Picture, уберите галочку в nvidia-settings у второго монитора Allow Flipping
2. Если будут артефакты в играх, поставьте галочку Force full composition pipeline там же в nvidia-settings
3. Если надо на втором мониторе отдельном чтобы геймпад работал то в /etc/udev/rules.d/99-joystick.rules надо написать KERNEL=="event*", ENV{ID_INPUT_JOYSTICK}=="?*", MODE:="0644". Иначе ему запрещено.
Но я оставил просто один монитор и не стал возиться до конца, там еще с фокусом окон проблемы возникли. Если найдете решение этого, пишите в комент. Два монитора все же приятнее чем один, так как не надо игры в оконный режим переводить и разрешение настраивать.
P.P.S Да, так как в ubuntu не нашлось иконки, которая бы показывала заряд контроллера, написал себе скриптик для этого.
UPDATE:
После совета в коментарии купил себе кабель HDMI 10м длинной, хорошо экранированный. В итоге сделал себе еще пару скриптиков для удобства использования при подключении по кабелю. Они переносят Big Picture окно на HDMI и звук на него переключают, а когда я это выключаю, переносят основное стим окно обратно и звук тоже, что бы на компе играть можно было сразу.
https://github.com/3DRaven/Steam_switcher
По кабелю удобнее то, что игры стартовать можно сразу в полноэкранном режиме и не возиться с их настройкой. Теперь включение игр происходит так:
Нажать на Dualsense PS кнопку. Подождать. Откроется на компе основной стим.
Нажать снова. Откроется Big Picture и перенесется на проектор.
Играть.
Большой плюс кабеля в том, что не надо выключать игры что бы посмотреть на проекторе кино, так как просто переключается вход. Также купил себе кейпад копеечный китайский и играю лёжа в гамаке с клавомышкой, удобно. Под мышку подложил планшет. Это же комп, мне геймпад удобен только для гоночек и платформеров, для остального есть лучшее :)
UPDATE 1:
Спустя время от схемы выше я перешел к другому скрипту.
https://github.com/3DRaven/gnome-dualsense-icon
Он работает примерно так же как первый, но еще делает иконку с процентом заряда геймпада на экране. Меню с возможностью переключить экраны. Помогает подсоединить геймпад по блютус повторно если он уснул. Позволяет переключать экраны кнопками на геймпаде если надо. Все так же следит за стимом и если включился big picture переводит все на проектор и при выключении обратно на основной монитор.
Кабель обычный сменил на hdmi оптический. Не покупайте обычные! Оптический длинной 15м и никаких искажений или проблем с ним! Просто класс. Лаг я тоже не замечаю, наверное он есть, но все работает идеально. Лучше стимлинка.
Так что теперь если надо поиграть я просто жму на геймпаде кнопу PS до момента когда все не включится (5-10с) :) Коннект проснувшегося геймпада, запуск стима если он не запущен, открытие big picture, переключение на проектор, все происходит само, когда надоело, все само выключается. Удобно, никаких швов или лишних телодвижений, которые меня поначалу все же раздражали. При этом скрипт один экран выключает целиком, а второй включает когда надо поиграть. В таком варианте никаких проблем с фокусом, разрншением или любых других. Все прям без швов работает, абсолютно идеально.