LINUX.ORG.RU

Возможно ли ограничить рабочую зону дисплея куском экрана?

 , , ,


0

1

Всем првиет!

Такое дело. Есть встраиваемый компухтер с Linux Debian на борту. У него есть «встроенный» дисплей подключенный по LVDS к матери, так вот он физически 1280х390, а мать и система его видит как 1280х1024 и всё работает если не брать в рассчёт что ТАМ за экраном ещё есть пространство.
И вот иногда то доставляет неудобства, то как консоль не юзабельна, а в Хсах иногда туда улетают окна.

Есть ли возможность ограничить размер Xorg рабочего стола нужным мне размером не взирая на заявленый размер дисплея?

Я пробовал через xrandr создать новый mode и его активировать, но либо получаю «синий» (не смерти) экран что расценивается матрицей как не верное разрешение, либо ошибку о невозможности установить разрешение.

Можно взять какой-нибудь тайловый оконный менеджер, зафиксировать там одно окно в разрешении 1280x390, а внутри запустить Xephyr, и уже в зефире запускать всё остальное.

Aceler ★★★★★
()

Есть ли возможность

(на выбор)

  1. сдампить edid, пофискить его, подсовывать ядру (или залить назад, если есть возможность)
  2. задать режим графики параметром ядра
  3. сделать статический конфиг иксов
  4. (посоветованный выше костыль) тайловый манагер
aol ★★★★★
()
Ответ на: комментарий от aol

Xephyr я уже нагуглил, не канает по причине не возможности работы с 3D графикой, а у меня там вывод окошек с ускорением графиги.

edid залить обратно никак это я уже проверил, хотел биос пересобрать, но там какая то китаятина которая не взлетает (хотя ранее я делал такие вещи на других железках)

А что можно сделать в статическом конфиге ядра? Прописать ModeLine который я пытаюсь скормить xrandr и он не влзетает? или есть какие то более «мягкие» воздействия?

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

edid залить обратно никак

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

мы со своей китаятиной тоже наприседались. в итоге, вендору отправили верный едид, а он нам - обновленный биос )

ModeLine не влзетает

а точно там всё прилично с таймингами? был где-то калькулятор-генератор для моделайнов…

aol ★★★★★
()

Вычислить, подобрать рабочий mode 1280x1024 и исправить в нём только одно число, сохранив неизменными остальные параметры.

Elyas ★★★★★
()

Есть ли возможность ограничить размер Xorg рабочего стола нужным мне размером не взирая на заявленый размер дисплея?

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

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

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

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

EDID тебе не даст ничего такого чего бы нельзя было прописать в ModeLine. Собственно, итогов подменённого EDID всё равно будет именно ModeLine, только не написанный явно в икс-конфиге. Так что если рабочий ModeLine найти не получается то от EDID толку тоже не будет.

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

а точно там всё прилично с таймингами? был где-то калькулятор-генератор для моделайнов…

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

Если у автора есть рабочий конфиг для 1028х1024 то я бы начал с отрезания лишних строк (всех кроме 390) в пользу межкадрового интервала - тогда никакие частоты не поплывут и дисплей может быть даже не заметит изменений.

Автор, покажи моделайн который работает (для 1280х1024), предложу тебе возможные фиксы к нему.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Тут может не с разрежением нужно играть, а с трансформацией. Я не пробовал, но можно вроде задать трансформацию дабы сжать вывод в меньший размер --transform, а затем сдвинуть полученное через --pos. Там же можно вертеть изображением как хочешь, а не только разрежение выставлять. Но на себе экспериментировать сейчас не хочу =)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от anonymous

А, ну чтобы починить область видимости консоли да, придётся наверно EDID править, но это не отменяет того факта, что начать стоит с поиска рабочего ModeLine.

Консоль кстати можно с помощью screen/tmux исправить скорее всего, хотя это тоже костыль.

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

Спасибо всем за активное участие. Очень признателен.

Вот чем обладаю сейчас:

$ DISPLAY=:0  xrandr --verbose
Screen 0: minimum 320 x 200, current 1920 x 2104, maximum 16384 x 16384
eDP-1 connected 1280x1024+0+1080 (0x47) normal (normal left inverted right x axis y axis) 519mm x 324mm
	Identifier: 0x41
	Timestamp:  34435
	Subpixel:   unknown
	Gamma:      1.0:1.0:1.0
	Brightness: 1.0
	Clones:    
	CRTC:       1
	CRTCs:      1 0 2
	Transform:  1.000000 0.000000 0.000000
	            0.000000 1.000000 0.000000
	            0.000000 0.000000 1.000000
	           filter: 
	EDID: 
		00ffffffffffff000d12117570030000
		01200104a5000078e28042ac5130b425
		10505300000001010101010101010101
		0101010101018c2300a050001e403020
		370007442100001a0000000000000000
		00000000000000000000000000fd0038
		4c1e5311000a202020202020000000fc
		00434837353131420a20202020200026
	Colorspace: Default 
		supported: Default, BT709_YCC, XVYCC_601, XVYCC_709, SYCC_601, opYCC_601, opRGB, BT2020_CYCC, BT2020_RGB, BT2020_YCC, DCI-P3_RGB_D65, RGB_WIDE_FIXED, RGB_WIDE_FLOAT, BT601_YCC
	max bpc: 12 
		range: (6, 12)
	Broadcast RGB: Automatic 
		supported: Automatic, Full, Limited 16:235
	panel orientation: Normal 
		supported: Normal, Upside Down, Left Side Up, Right Side Up
	scaling mode: Full aspect 
		supported: Full, Center, Full aspect
	link-status: Good 
		supported: Good, Bad
	CTM: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 
		0 1 
	CONNECTOR_ID: 79 
		supported: 79
	non-desktop: 0 
		range: (0, 1)
  1280x1024 (0x47) 91.000MHz +HSync -VSync *current +preferred
        h: width  1280 start 1328 end 1360 total 1440 skew    0 clock  63.19KHz
        v: height 1024 start 1027 end 1034 total 1054           clock  59.96Hz
  1280x960 (0x48) 107.922MHz +HSync +VSync
        h: width  1280 start 1376 end 1488 total 1800 skew    0 clock  59.96KHz
        v: height  960 start  961 end  964 total 1000           clock  59.96Hz
  1280x800 (0x49) 71.055MHz +HSync -VSync
        h: width  1280 start 1328 end 1360 total 1440 skew    0 clock  49.34KHz
        v: height  800 start  803 end  809 total  823           clock  59.96Hz
  1280x720 (0x4a) 63.976MHz +HSync -VSync
        h: width  1280 start 1328 end 1360 total 1440 skew    0 clock  44.43KHz
        v: height  720 start  723 end  728 total  741           clock  59.96Hz
  1024x768 (0x4b) 64.949MHz -HSync -VSync
        h: width  1024 start 1048 end 1184 total 1344 skew    0 clock  48.33KHz
        v: height  768 start  771 end  777 total  806           clock  59.96Hz
  960x720 (0x4c) 116.915MHz -HSync +VSync DoubleScan
        h: width   960 start 1024 end 1128 total 1300 skew    0 clock  89.93KHz
        v: height  720 start  720 end  722 total  750           clock  59.96Hz
  928x696 (0x4d) 108.979MHz -HSync +VSync DoubleScan
        h: width   928 start  976 end 1088 total 1264 skew    0 clock  86.22KHz
        v: height  696 start  696 end  698 total  719           clock  59.96Hz
  896x672 (0x4e) 102.301MHz -HSync +VSync DoubleScan
        h: width   896 start  960 end 1060 total 1224 skew    0 clock  83.58KHz
        v: height  672 start  672 end  674 total  697           clock  59.96Hz
  1024x576 (0x4f) 42.096MHz +HSync -VSync
        h: width  1024 start 1072 end 1104 total 1184 skew    0 clock  35.55KHz
        v: height  576 start  579 end  584 total  593           clock  59.96Hz
  960x600 (0x50) 76.946MHz +HSync -VSync DoubleScan
        h: width   960 start  984 end 1000 total 1040 skew    0 clock  73.99KHz
        v: height  600 start  601 end  604 total  617           clock  59.96Hz
  960x540 (0x51) 37.336MHz +HSync -VSync
        h: width   960 start 1008 end 1040 total 1120 skew    0 clock  33.34KHz
        v: height  540 start  543 end  548 total  556           clock  59.96Hz
  800x600 (0x52) 38.372MHz +HSync +VSync
        h: width   800 start  824 end  896 total 1024 skew    0 clock  37.47KHz
        v: height  600 start  601 end  603 total  625           clock  59.96Hz
  840x525 (0x53) 59.573MHz +HSync -VSync DoubleScan
        h: width   840 start  864 end  880 total  920 skew    0 clock  64.75KHz
        v: height  525 start  526 end  529 total  540           clock  59.96Hz
  864x486 (0x54) 30.697MHz +HSync -VSync
        h: width   864 start  912 end  944 total 1024 skew    0 clock  29.98KHz
        v: height  486 start  489 end  494 total  500           clock  59.96Hz
  700x525 (0x55) 60.980MHz +HSync +VSync DoubleScan
        h: width   700 start  744 end  820 total  940 skew    0 clock  64.87KHz
        v: height  525 start  526 end  532 total  541           clock  59.96Hz
  800x450 (0x56) 48.857MHz +HSync -VSync DoubleScan
        h: width   800 start  824 end  840 total  880 skew    0 clock  55.52KHz
        v: height  450 start  451 end  454 total  463           clock  59.96Hz
  640x512 (0x57) 53.943MHz +HSync +VSync DoubleScan
        h: width   640 start  664 end  720 total  844 skew    0 clock  63.91KHz
        v: height  512 start  512 end  514 total  533           clock  59.96Hz
  700x450 (0x58) 43.305MHz +HSync -VSync DoubleScan
        h: width   700 start  724 end  740 total  780 skew    0 clock  55.52KHz
        v: height  450 start  451 end  456 total  463           clock  59.96Hz
  640x480 (0x59) 25.181MHz -HSync -VSync
        h: width   640 start  656 end  752 total  800 skew    0 clock  31.48KHz
        v: height  480 start  490 end  492 total  525           clock  59.95Hz
  720x405 (0x5a) 22.107MHz +HSync -VSync
        h: width   720 start  768 end  800 total  880 skew    0 clock  25.12KHz
        v: height  405 start  408 end  413 total  419           clock  59.96Hz
  684x384 (0x5b) 36.187MHz +HSync -VSync DoubleScan
        h: width   684 start  708 end  724 total  764 skew    0 clock  47.37KHz
        v: height  384 start  385 end  390 total  395           clock  59.96Hz
  640x360 (0x5c) 17.939MHz +HSync -VSync
        h: width   640 start  688 end  720 total  800 skew    0 clock  22.42KHz
        v: height  360 start  363 end  368 total  374           clock  59.96Hz
  512x384 (0x5d) 32.474MHz -HSync -VSync DoubleScan
        h: width   512 start  524 end  592 total  672 skew    0 clock  48.32KHz
        v: height  384 start  385 end  388 total  403           clock  59.96Hz
  512x288 (0x5e) 21.012MHz +HSync -VSync DoubleScan
        h: width   512 start  536 end  552 total  592 skew    0 clock  35.49KHz
        v: height  288 start  289 end  292 total  296           clock  59.95Hz
  480x270 (0x5f) 18.668MHz +HSync -VSync DoubleScan
        h: width   480 start  504 end  520 total  560 skew    0 clock  33.34KHz
        v: height  270 start  271 end  274 total  278           clock  59.96Hz
  400x300 (0x60) 19.155MHz +HSync +VSync DoubleScan
        h: width   400 start  412 end  448 total  512 skew    0 clock  37.41KHz
        v: height  300 start  300 end  301 total  312           clock  59.96Hz
  432x243 (0x61) 15.348MHz +HSync -VSync DoubleScan
        h: width   432 start  456 end  472 total  512 skew    0 clock  29.98KHz
        v: height  243 start  244 end  247 total  250           clock  59.95Hz
  320x240 (0x62) 12.566MHz -HSync -VSync DoubleScan
        h: width   320 start  328 end  376 total  400 skew    0 clock  31.41KHz
        v: height  240 start  245 end  246 total  262           clock  59.95Hz
  360x202 (0x63) 11.027MHz +HSync -VSync DoubleScan
        h: width   360 start  384 end  400 total  440 skew    0 clock  25.06KHz
        v: height  202 start  204 end  206 total  209           clock  59.96Hz
  320x180 (0x64)  8.969MHz +HSync -VSync DoubleScan
        h: width   320 start  344 end  360 total  400 skew    0 clock  22.42KHz
        v: height  180 start  181 end  184 total  187           clock  59.95Hz

Spider55
() автор топика
Последнее исправление: Spider55 (всего исправлений: 1)
Ответ на: комментарий от Spider55

Воодушевившись вашими наставлениями поэкспериментировал с генераторами ModeLine. Пока с трудом понимаю что и зачем тут...

попробовал такой вариант:

xrandr --newmode "1280x390" 35.25 1280 1328 1360 1440 390 393 403 409 +HSync -VSync

он даже применился. даже видимо всё как я хотел НО!
по факту на матрице картинка отображается с отступом примерно 300 пикселей от верха вниз.

т.е. сверху экран на 2/3 чёрный, а потом начинается обещанные мне 1280х390, к слову РОВНО такая же ситуация если выставить что то типа 1280х720 из «стандартного» списка.

Spider55
() автор топика
Ответ на: комментарий от Elyas

Эх... а я надеялся что получится. Тоже начал читать про VSyncStart/End думал как-то ими можно поиграться.

Добавились такие режимы в xrandr:

  1280x1024 (0x47) 91.000MHz +HSync -VSync *current +preferred
        h: width  1280 start 1328 end 1360 total 1440 skew    0 clock  63.19KHz
        v: height 1024 start 1027 end 1034 total 1054           clock  59.96Hz

...


  1280x390 (0x3f4) 35.250MHz +HSync -VSync
        h: width  1280 start 1328 end 1360 total 1440 skew    0 clock  24.48KHz
        v: height  390 start  393 end  403 total  409           clock  59.85Hz
  1280x390_new (0x3f5) 91.000MHz +HSync -VSync *current
        h: width  1280 start 1328 end 1360 total 1440 skew    0 clock  63.19KHz
        v: height  390 start 1027 end 1034 total 1054           clock  59.96Hz

оба как ни странно абсолютно идентичны. Экран съехавший...

что-то похоже срывает крышу у матрицы или видюхи при таком раскладе...

Не понимаю почему отступ. Какая физика процесса...

Spider55
() автор топика
Последнее исправление: Spider55 (всего исправлений: 1)
Ответ на: комментарий от Spider55

В этом процессе же ещё участвует контроллер матрицы со своей прошивкой. На аналоговых «трубках» можно было сделать что угодно в пределах физических возможностей.

Может можно добиться желаемого через xrandr –transform, но не уверен.

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

Скорее всего контроллер = видяха. Матрица LVDS и что-то там думать особо не должно получаться... Там же тупо поток пикселей и синхры

Продолжаю активно гуглить н эту тему и нашёл такой результат, мол у кого-то похожая матрица завелась так:

root@DietPi:~# fbset -g 1280 390 1280 390 32 -pixclock 42009500 -left 8 -right 128 -upper 64 -lower 390 -hslen 1 -vslen 3
root@DietPi:~# fbset

mode "1280x390"
    geometry 1280 390 1280 390 32
    timings 0 8 128 64 390 1 3
    accel true
    rgba 8/16,8/8,8/0,0/0
endmode

root@DietPi:~# 


Как это «прочитать»?

Spider55
() автор топика
Последнее исправление: Spider55 (всего исправлений: 1)
Ответ на: комментарий от Spider55

Этот исходный работающий?

 1280x1024 (0x47) 91.000MHz +HSync -VSync *current +preferred
        h: width  1280 start 1328 end 1360 total 1440 skew    0 clock  63.19KHz
        v: height 1024 start 1027 end 1034 total 1054           clock  59.96Hz

попробуй такой

91.00 1280 1328 1360 1440 390 1027 1034 1054 +HSync -VSync

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

А уже вижу. Ты уверен что это он? Удали тот режим с низкой частотой, сделай чтоб только один 1280х390 был и назывался именно так без приписок.

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

Ещё попробуй «390 393 403 1054».

Скорее всего контроллер = видяха. Матрица LVDS и что-то там думать особо не должно получаться... Там же тупо поток пикселей и синхры

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

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

Короче целый день ставил эксперименты с разными разрешениями.
Пока не забыл. Пробовал просто в консольке с fb сделать fbset -xres 1280 -yres 390
Результат тот что надо. Но в fb.

Теперь о xrandr и иксах.
Любой режим 1280 х на любую высоту включается. НО!
Матрица рисует картинку как бы снизу. От этого сверху над картинкой до верхнего края матрицы всегда чёрная зона высотой 1024-(высота изображения).

Как это победить - не знаю...

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

В тайловых WM типа Sway/i3 можно сказать конкретно откуда начать рисовать окно задав позицию. Попробуй - может оно. Так то обычно монитор должен подгонять изображение так как у нвидии часто такое вылезает что ТВ имеет увеличенную картинку например.

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

edid я твой ради интереса распарсил, если ты этим еще не озадачился )

aol@debian:~$ edid-decode /tmp/myfile.dat
edid-decode (hex):

00 ff ff ff ff ff ff 00 0d 12 11 75 70 03 00 00
01 20 01 04 a5 00 00 78 e2 80 42 ac 51 30 b4 25
10 50 53 00 00 00 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 8c 23 00 a0 50 00 1e 40 30 20
37 00 07 44 21 00 00 1a 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 fd 00 38
4c 1e 53 11 00 0a 20 20 20 20 20 20 00 00 00 fc
00 43 48 37 35 31 31 42 0a 20 20 20 20 20 00 26

----------------

Block 0, Base EDID:
  EDID Structure Version & Revision: 1.4
  Vendor & Product Identification:
    Manufacturer: CHR
    Model: 29969
    Serial Number: 880
    Made in: week 1 of 2022
  Basic Display Parameters & Features:
    Digital display
    Bits per primary color channel: 8
    DisplayPort interface
    Image size is variable
    Gamma: 2.20
    DPMS levels: Standby Suspend Off
    Supported color formats: RGB 4:4:4
    First detailed timing includes the native pixel format and preferred refresh rate
  Color Characteristics:
    Red  : 0.6738, 0.3164
    Green: 0.1875, 0.7031
    Blue : 0.1455, 0.0625
    White: 0.3125, 0.3261
  Established Timings I & II: none
  Standard Timings: none
  Detailed Timing Descriptors:
    DTD 1:  1280x1024   59.957 Hz   5:4    63.194 kHz  91.000 MHz (519 mm x 324 mm)
                 Hfront   48 Hsync  32 Hback  80 Hpol P
                 Vfront    3 Vsync   7 Vback  20 Vpol N
    Empty Descriptor
  Display Range Limits:
    Monitor ranges (GTF): 56-76 Hz V, 30-83 kHz H, max dotclock 170 MHz
    Display Product Name: 'CH7511B'
Checksum: 0x26

вдруг, пригодится )

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

А когда разрешение 1024 стоит - в нижней части экрана что-то есть или там строго чёрные пиксели? У LCD мониторов замечал что даже с правильным разрешением картинка съезжала если какая-то часть экрана не содержит нечёрных пикселей - монитор забивал на настоящие синхроимпульсы (ну только частоту из них брал) и делал свои исходя из парсинга пикселей, чтоб выровнять имеющееся изображение по границе матрицы. Возможно у тебя то же самое, только матрица выравнивает на фейковое 1024 несмотря на то что она 390.

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

Держи https://askubuntu.com/a/1177060

Для Ъ:

cvt 1000 766
xrandr --newmode BROKEN 62.00  1000 1056 1152 1304  766 769 779 796 -hsync +vsync
xrandr --addmode eDP-1 BROKEN
xrandr --output eDP-1 --fb 1000x766 --panning 1000x766 --mode BROKEN
xrandr --fb 1000x766 --output eDP-1 --mode 1366x768

Делает полосу сбоку, но вообще пофигу, главное принцип.

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

Не понял вопроса :)
Когда 1024 стоит я не вижу всё что ниже 390 потому что там нет матрицы. А так там «внутри» просто рабочий стол который мне не нужен и мешается по факту. Ну картинка на нём есть. Если сделать скриншот - то там полноценная картинка.

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

Почитал про setmonitor - решение кажется ИДЕАЛЬНЫМ и простым как 2х2, но вот беда... в моём выводе man нет этого ключика. К реальной железке теперь уже наверное попаду только в понедельник и попробую...

Spider55
() автор топика
Ответ на: комментарий от kirill_rrr

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

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

Добрался я таки до железяки...

И я не понял как и чего делать дальше с этим «виртуальным» монитором...
Ну вот выполнил я:

xrandr --setmonitor eDP-1-1 1280/1280x390/390+0+0 eDP-1

в результате появилась запись в списке мониторов
$ xrandr -d :0 --listmonitors                                                                                                                                                                                                                                                  Monitors: 2                                                                                                                                                                                                                                                                                                                0: +*HDMI-1 1920/708x1080/398+0+0  HDMI-1                                                                                                                                                                                                                                                                                 1: eDP-1-1 1280/1280x390/390+0+0  eDP-1

А дальше чего? Что делать с этим eDP-1-1 ?
На картинку команды выше никак не повлияли. Она как была 1920х1080 + 1280х1024 так и осталась.
как параметр --output xrandr не принимает этот eDP-1-1
Сам Xorg никак не реагирует на его наличие.

Напомню, что сейчас конфигурация такая:
xrandr --output HDMI-1 --mode 1920x1080 --primary --output eDP-1 --mode 1280x1024 --pos 0x1080


Пробовал варианты с pannig и transform, вроде даже получается добиться желаемого, что второй дисплей всего 1280х390. Но... Но теперь он сдвинут вправо с черным сектором слева от экрана. И что бы я не делал это смещение не исправляется.

Spider55
() автор топика