Так получилось, что ранее я ругал карты ATI Radeon здесь, тут и там. И для разнообразия у меня появился ноутбук Lenovo Z560 с карточкой Nvidia на борту. Пропиетарные дрова с сайта Nvidia ставятся без проблем, все работает хорошо — за исключением одного маленького нюанса.
Почему-то разработчики драйверов перешли на новую версию протокола randr, и теперь в системе для экрана ноутбука определяется только одно единственное разрешение экрана:
> xrandr -q Screen 0: minimum 8 x 8, current 1366 x 768, maximum 8192 x 8192 VGA-0 disconnected (normal left inverted right x axis y axis) LVDS-0 connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 194mm 1366x768 60.0*+ 50.0 HDMI-0 disconnected (normal left inverted right x axis y axis)
В старой версии протокола разрешений экрана можно было получить гораздо больше:
> xrandr --q1 SZ: Pixels Physical Refresh *0 1366 x 768 ( 340mm x 191mm ) *50 51 1 1280 x 720 ( 318mm x 179mm ) 52 2 1024 x 768 ( 254mm x 191mm ) 53 3 800 x 600 ( 199mm x 149mm ) 54 4 640 x 480 ( 159mm x 119mm ) 55 Current rotation - normal Current reflection - none Rotations possible - normal left inverted right Reflections possible - X Axis Y Axis
Если надо кодить, или править документ какой-нибудь, то проблемы это не вызывает. Но если решил порубиться в старую игрушку с древним разрешением экрана (например, 640×480), то игра вполне себе может ругаться на разрешение экрана. Например, у меня fallout не запускался, и появлялось сообщение Error initializing video mode 640×480, и в консоли при этом был виден текст ошибки такого вот содержания:
err:x11settings:X11DRV_ChangeDisplaySettingsEx No matching mode found 640x480x8 @0! (XRandR 1.2)
Оказывается, проблему победить можно. Надо лишь наваять 2 скрипта и поместить их куда-нибудь в пути. Первый скрипт позволяет менять разрешение экрана из командной строки:
> cat setres.sh #!/bin/bash RESOLUTION=$1 nvidia-settings --assign CurrentMetaMode="LVDS-0: nvidia-auto-select @$RESOLUTION +0 +0 {ViewPortIn=$RESOLUTION, ViewPortOut=$RESOLUTION}"
Второй скрипт собственно меняет разрешение экрана на правильное, запускает fallout в десктопе со «правильным» разрешением экрана, ну и возвращает настройки разрешения обратно по завершении игры:
> cat fallout1.sh #!/bin/sh cd /home/username/.wine/drive_c/Program Files/GOG.com/Fallout /usr/local/bin/setres.sh 640x480 wine explorer /desktop=foo,640x480 falloutw.exe /usr/local/bin/setres.sh 1366x768 cd $HOME
Смена разрешения на 640×480 — необязательный шаг, и если его не сделать, можно играть в оконном режиме. А вот для полноэкранного режима без смены разрешения не обойтись.