A week or three ago, I whinged on this list about X forgetting
my oddball rotated-two-screen configuration and displaying 
distorted and sideways after switching the KVM (Keyboard Video
Mouse) between two computers. 

Problem (semi-adequately) solved.

I learned many things (some disturbing) while solving the
problem.  My problem wasn't X or linux (this time), but I
learned that we may ALL have Big Problems Ahead if we don't
describe and document how X actually works, including
decades of accumulated assumptions that reside mostly in
60+year-old brains ... and 30 years of accumulated Q&A on
the web that is mostly 25 years obsolete. 

House built on sand, folks ...

Anyway ... My real problem is that video cards (not Linux
or other OS) are designed to reconfigure into basic 1024x768
VGA mode (not rotated like my screens) if they are not
getting EDID (Extended Display Identification Data) from
the display. 

With a "dumb" KVM switch, the EDID information only goes to
the computer and video card that is currently driving the
display.  The disconnected video card in the neglected 
computer is talking to Elvis and doing drugs, singing "Are
You Lonesome Tonight", and regressing to its VGA childhood.

----

I solved this two ways (and failed many more ways).  The
most important solution was switching my left-side "home
screen" associated with mouse and keyboard with a better
KVM (IOGEAR GCS932UB) which REMEMBERS the entire EDID 
configuration (many kilobytes) of the connected monitor,
and sends it to BOTH computers that it connects to, even
if that input channel isn't providing signal.  That keeps
the video cards in both computers feeding the KVM switch
from listening to imaginary voices from decades past.

Note, the exact IOGEAR model number GCS932UB matters;
most models don't remember the EDID config.  There are
other KVM switches or inline dongles from Newegg and
other outfits that remember EDID, but they cost hundreds
to thousands of dollars.  You will want those if you are
monitoring tens to thousands of computers.

What does NOT work is $20 "EDID emulators" from Amazon.
I tried one of those; it can only remember one of 15
widescreen modes, and spew that EDID modeline only,
and only for the one computer it is in-line to. 
I'd call that the Forest Gump EDID mode, except that
Forest was smarter, and knew how to keep running.

----

The Other Trick is to build a shell script around the
"xrandr" command which configures (and reconfigures) your
video card (two channels for both screens). 

------------------------------------------------------
#!/bin/bash
# 2022 May 14 KHL
# 2022 May 25 KHL
# /usr/local/bin/twoscreenR7450
# two side-by-side Planar screens for ohmate using Radeon R7 450
# activate with:
#   "ln /usr/local/bin/twoscreenR7450 /usr/local/bin/twoscreen"

DISPLAY=:0; export DISPLAY

xrandr --output DisplayPort-0 --rotate left --primary --pos 0x0 \
       --output DisplayPort-1 --rotate right       --pos 1024x0

echo -n "/usr/local/bin/twoscreenR7450" >> /var/log/twoscreenX
date                                    >> /var/log/twoscreenX
------------------------------------------------------

I run this snippet of code in a timed loop; sleep 10
seconds and repeat.   Note that "right-of" (instead of 
"pos 1024x0") can fail with rotated screens.   

My customized config script ("twoscreen") lives
in /usr/local/bin and is SUID root, which is probably 
dangerous and fattening.  The loop is performed by 
another SUID script ("twoloop") which is launched "nohup"
at startup ... in twisty little ways all different for
newer/older redhat/debian/bsd distros.

You can configure screens with the GUI system configuration,
a program called "arandr" for many linux distros.  However,
operating a GUI and selecting nested menus and clicking
modes and drop-down boxes using a sideways screen is a
descent into Hell.  All versions of arandr let you rotate
a screen, but many versions don't understand that a rotated
screen swaps width and height, so you cannot place two
rotated screens adjacent in the X direction. 

The Workspace Switcher applet is similarly confused, and
the lightdm login window refuses to rotate.  Many more
problems still need solving.

But what goes into YOUR script?  Every multiport graphics
card uses different nomenclature for its ports:

DisplayPort-0 and DisplayPort-1 for a Radeon R7 450 
with DisplayPort outputs. 

DisplayPort-0 and DVI-0 and HDMI-0 for a Radeon R7 450
with those different outputs.

DVI-I-1 and DVI-I-2 for an Nvidia 750T card with two
DVI ports. 

DVI-I-1 and DVI-D-1 for an Nvidia 8800 with two graphics
ports.  

Other names, some defamatory, for other hardware.

"xrandr --query" (as root) will tell you about the port
names and available modes ... except when it doesn't.

----

If you have made it down this far, CONGRATULATIONS!  

In five minutes, you've travelled a distance that cost me
60 hours and a few hundred dollars for hardware.  Some of
which I will keep and use, most of which will be donated
to FreeGeek, and some of which will be boiled in battery
acid, along with the design engineers if I can find them.

And for you young geeks seeking fame and fortune rather 
than twenty-to-life in prison, X needs an up-to-date user
and debug and  driver design book, cognizant of modern
graphics cards rather than Sun workstations. 

The newest book I've found is Chris Tyler's 2008 "X Power
Tools".  Books will make a comeback, after those who learn
from videos and tweets murder each other or themselves
("drink bleach to prevent COVID").  A very large pile
of books is good shielding for your fallout shelter,
and your "sunlight-powered Kindle" in the aftermath.

Keith

-- 
Keith Lofstrom          kei...@keithl.com

Reply via email to