Saturday, January 25, 2020

Tools key brings up settings in Ubuntu 19.10

One of the things I really liked to do was to set up my keyboard's Tools Key to put the computer into suspend. On my dell keyboard (y-uk-del1), the Tools key is a special key that has a little Music Symbol on it.

But after upgrading to Ubuntu 19.10 the Tools key will now bring up the settings window. So what to do?

All I had to do was to set the shortcut to Super+Tools which did the trick, or find another key to do it. There's a special "Home Page" key on the function row that works as well.


I wanted them both to do the suspend action but you can only assign a single shortcut key, so why not create two custom shortcuts, one for each key.





Also I discovered that you can put the computer into suspend by holding down the mouse button over the power button in the System Menu. Then the power button changes into a pause symbol. Holding down alt also works to choose suspend instead of power off.

Wednesday, January 15, 2020

Fiddling with the Matrox DualHead2Go on ubuntu

I saw one of these on ebay so I thought I'd give it a spin. I got the dualhead2go digital edition which has VGA input and dual DVI outputs.

If you don't know what a DualHead2Go is, it takes a video signal in and splits it across 2 monitors, effectively giving you an additional monitor out. The catch is that your computer video card must output a very high VGA resolution, 3840x1080 if you want dual 1920x1080 monitors.

On my laptop with Ubuntu 19.04 that has integrated intel graphics, it will only output 2*1360x768 (2720x768) resolution on the VGA port. Anything higher and I get "failed to configure crtc1".

These are all of the different resolutions supported by the DualHead2go:


single standard landscape



single monitor wide landscape





dualhead wide landscape




dualhead standard portrait



dualhead wide portrait




There's a limit of 4 settings that you can preset. These will show up on the matrox's EDID.

So after enabling 3480x1080 double 1920x1080 ,2560x1600 (double 1280x800 portrait), 2720x768 (double 1360x768)
the edid returns:

(if you don't have get-edid then sudo apt install read-edid)

sudo get-edid | parse-edid

Section "Monitor"
Identifier ""
ModelName ""
VendorName "MTX"
# Monitor Manufactured week 30 of 2005
# EDID version 1.3
# Analog Display
Option "SyncOnGreen" "true"
# Display Physical Size not given. Normal for projectors.
Gamma 2.20
Option "DPMS" "true"
#Not giving standard mode: 1600x1200, 60Hz
#Not giving standard mode: 1280x1024, 60Hz
Modeline "Mode 0" 261.01 3840 3856 3904 3920 1080 1083 1094 1111 +hsync -vsync
Modeline "Mode 1" 271.00 2560 2608 2640 2744 1600 1603 1615 1646 +hsync -vsync
Modeline "Mode 2" 171.00 2720 2848 2960 3584 768 771 774 795 +hsync +vsync
EndSection



matrox powerdesk



There's options to swap displays, adjust image quality




I used an old windows vista machine and installed PowerDesk to set the settings on the box. It wants a good signal going into it so I left my ubuntu system plugged into the VGA generating a signal, while the USB was plugged into the windows vista box. If there's no VGA signal going into the box, PowerDesk won't let you set the modes in the mode management settings. As long as there's a signal, even if it's not originating from the vista box, you're fine. Once you've programmed the settings on the box, you can disconnect the usb from the vista box. You do need to plug in the usb to a usb port to get power.

So the big problem is one of getting a VGA signal of sufficiently hi-res, namely 3840x1080. My laptop with ubuntu 19.04 and intel graphics would only do 2720x768. What about another machine?

I installed Ubuntu 19.10 on another system with an Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz. The integrated graphics would come up at 3840x1080 but for some reason, the acceleration was nonexistent. It was so slooooooooow, the system was running but it was slow. I did have an idea, why not try wayland? Selecting wayland at the boot screen came up fine with acceleration. Awesome.

There's also an AMD Cedar graphics card in this system, and strangely it wouldn't go higher than 2720x768. 3840x1080 would give me a black screen. Oddly, booting this same system under knoppix 8.6.1 livecd would give the 3840x1080 resolution on the AMD Cedar.


00:02.0 Display controller: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09)
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cedar [Radeon HD 5000/6000/7350/8350 Series]


One of the things about an ultrawide screen is that youtube fullscreen is problematic, since it splits it across two monitors. I wish that fullscreen could be setup to go to the left side or the right side of the full double-monitor.

Adjusting the image quality needed a "special image" so I made my own in gimp by hand. It's an 3840x1080 image of alternating black and white lines.
Once I made this image, I just viewed it in fullscreen with eog, hitting f11 to go fullscreen.



The full image doesn't come through with blogger's image system, so here's a piece of it if you want to make your own 3840x1080 by stitching:



I tried to snapshot the image display when PowerDesk would overlay the desktop with the alternating lines, but the PrintScreen key would just give me the normal desktop. I don't know if my version works as intended but I hope it does.

Someday, they'll have sorted the high resolution VGA outputs on linux, I suppose most people don't have any use for such resolutions as most people don't have matrox DualHead2Gos.

Saturday, December 21, 2019

XSane preview window bug and failed to start scanner invalid argument

I had a problem the other day with XSane.

It's been working awesome and then one day, the preview window wouldn't come up properly, basically a blank window.

And then I couldn't scan anything, getting an error dialog that said "Failed to start scanner: Invalid argument".





This was driving me crazy, I power cycled the hp printer/all in one 5740 but it wouldn't work at all.


So let's see if we can scan with scanimage.

scanimage -d hpaio:/net/Officejet_5740_series?ip=192.168.1.10 --format=tiff > mytest2.tiff


That worked! So why was I getting the invalid argument error? Looking carefully I saw that the area to scan was set to basically zero. The rectangle specified was basically of zero area. If you look at the top left it's set to 8.5 and 11.69 and the bottom right is 8.5 and 11.69. I must have clicked somewhere in the "blank" preview window that set these coordinates.

It'd be nice if it said "Scan Area Coordinates invalid" instead of just "invalid argument".


I see that other people have been having the same bug with the preview window:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=867667

What's interesting is that opening the preview window with CTRL+1 seems to have fixed it. Opening it with the menu Window/Show Preview was giving me the blank screen.


Anyway, I can happily scan again!


Just for fun, let's see how small a region we can actually scan without getting the "Failed to start scanner: Invalid argument" error.


The smallest I can scan is 1x1x24 (3.0B) for 3 bytes!

Wednesday, November 20, 2019

Weirdness with VGA to HDMI adapter and i915

So I've got an older TV that I wanted to use with a laptop and do triple monitors. The laptop has got its own 1600x900 built-in screen, and on the hdmi port I've connected a DVI 1920x1200 monitor and then there's a Toshiba 40FT1U on the VGA port.

The only problem is that the Toshiba 40FT1U doesn't like anything higher than 1280x1024 or 1366x768 on the VGA port. Checking with the manual, sure enough that's the maximum on VGA-in but HDMI-in will give you the full 1080p resolution.



I got on ebay and found a cheap VGA to HDMI adapter. The only problem is that I couldn't get Ubuntu 19.04 to output a video signal that xrandr would like.

The VGA to HDMI adapter had no EDID information, and get-edid wouldn't return anything.

Firing up cvt 1920 1080 60, I would make an xrandr newmode of 1920x1080.


$ cvt 1920 1080 60
# 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz
Modeline "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
$ xrandr --newmode "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
$ xrandr --addmode VGA-1 "1920x1080_60.00"
$ xrandr --output VGA-1 --mode "1920x1080_60.00"
xrandr: Configure crtc 1 failed



Sadly, that didn't work at all giving a "Configure crtc 1 failed" message.

Looking at my xorg log it says just Invalid argument:


$ less ~/.local/share/xorg/Xorg.0.log 
[   405.766] (II) modeset(0): Allocate new frame buffer 5440x1200 stride
[  1196.778] (EE) modeset(0): failed to set mode: Invalid argument




What's strange is that I can do a resolution of 1912x1080:


$ cvt 1912 1080 60
# 1912x1080 59.91 Hz (CVT) hsync: 67.10 kHz; pclk: 171.25 MHz
Modeline "1912x1080_60.00"  171.25  1912 2032 2232 2552  1080 1083 1093 1120 -hsync +vsync
$ xrandr --newmode "1912x1080_60.00"  171.25  1912 2032 2232 2552  1080 1083 1093 1120 -hsync +vsync
$ xrandr --addmode VGA-1 "1912x1080_60.00"
$ xrandr --output VGA-1 --mode "1912x1080_60.00"



So 1912x1080x60 works no problem, which is really strange. The only problem is that my VGA to HDMI adapter scrunches the screen horizontally, which is usable but it offends me terribly. Not having 1 to 1 pixels grated on me.

I've got another television a 50 inch emerson with a VGA input, and weirdly, plugging the VGA into it allows me to set a 1920x1080x60 resolution. Oddly, it has no EDID information either but the 1920x1080 resolution will work.


So I thought, let's see if we can get a working edid from another monitor and use that.

On another system with a sceptre monitor that was 1920x1080 I ran "sudo get-edid > sceptre_edid.bin".

Then I made a /usr/firmware/edid directory with "sudo mkdir /usr/firmware/edid" then "sudo cp sceptre_edid.bin /usr/firmware/edid/"/

Locating the file /etc/default/grub and running "sudo nano /etc/default/grub"


and making these changes:
GRUB_TIMEOUT=10
GRUB_TIMEOUT_STYLE=menu

GRUB_CMDLINE_LINUX=" drm.edid_firmware=VGA-1:edid/sceptre_edid.bin"



then "sudo update-grub"

and now it comes up just fine with 1920x1080 on the VGA-1 port.

So what is actually not working? Let's take a closer look at the EDID file with parse-edid.


$ cat sceptre_edid.bin | parse-edid
Checksum Correct

Section "Monitor"
 Identifier "E275W-1920"
 ModelName "E275W-1920"
 VendorName "SPT"
 # Monitor Manufactured week 6 of 2015
 # EDID version 1.3
 # Analog Display
 Option "SyncOnGreen" "true"
 DisplaySize 600 340
 Gamma 2.20
 Option "DPMS" "true"
 Horizsync 30-95
 VertRefresh 56-75
 # Maximum pixel clock is 180MHz
 #Not giving standard mode: 1280x800, 60Hz
 #Not giving standard mode: 1280x960, 60Hz
 #Not giving standard mode: 1280x1024, 60Hz
 #Not giving standard mode: 1440x900, 60Hz
 #Not giving standard mode: 1600x1200, 60Hz
 #Not giving standard mode: 1680x1050, 60Hz
 Modeline  "Mode 0" 148.50 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync 
 Modeline  "Mode 1" 118.97 1600 1712 1864 2112 900 901 904 932 -hsync +vsync 
EndSection


That modeline of "Mode 0" is 1920x1080 but the numbers are different from what cvt gives:


Comparing the two modelines, the numbers vary slightly and the hsync is opposite polarity.

Modeline "1920x1080_60.00"  173.00   1920 2048 2248 2576   1080 1083 1088 1120 -hsync +vsync
Modeline "Mode 0"           148.50   1920 2008 2052 2200   1080 1084 1089 1125 +hsync +vsync


Let's compare it to a reduced blanking modeline from cvt, now you'll notice that the vsync is opposite.

$ cvt 1920 1080 60 -r
# 1920x1080 59.93 Hz (CVT 2.07M9-R) hsync: 66.59 kHz; pclk: 138.50 MHz
Modeline "1920x1080R" 138.50 1920 1968 2000 2080 1080 1083 1088 1111 +hsync -vsync
Modeline "Mode 0" 148.50 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync



So I tried rebooting ubuntu *without* the drm.edid_firmware=VGA-1:edid/sceptre_edid.bin and it went right back to hating my cvt 1920 1080 60 modeline.

But let's try the modeline from the sceptre edid "Mode 0".

$ xrandr --newmode "Mode 0" 148.50 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync
$ xrandr --addmode VGA-1 "Mode 0"
$ xrandr --output VGA-1 --mode "Mode 0"

Hah! It likes that modeline!

It also seems to like the reduced blanking version.

$ cvt -r 1920 1080 60
# 1920x1080 59.93 Hz (CVT 2.07M9-R) hsync: 66.59 kHz; pclk: 138.50 MHz
Modeline "1920x1080R" 138.50 1920 1968 2000 2080 1080 1083 1088 1111 +hsync -vsync
$ xrandr --newmode "1920x1080R" 138.50 1920 1968 2000 2080 1080 1083 1088 1111 +hsync -vsync
$ xrandr --addmode VGA-1 "1920x1080R"
$ xrandr --output VGA-1 --mode "1920x1080R"


I also tried gtf and that didn't work. xrandr: Configure crtc 1 failed

Strangely, using drm.edid_firmware=VGA-1:edid/1920x1080.bin would work on the VGA to HDMI but for some reason I'd lose the other monitor.
(This would use a "built-in" 1920x1080 edid file)


The actual 1920x1080 timings can vary, here's a couple of monitors that have 1125 as the last number of the modeline.


From https://cdn.kramerav.com/web/downloads/white-papers/analog_edid_whitepaper_6.pdf:

"Knowing that the standardization problem exists mostly in widescreen resolutions, let us look at an example using 1920x1080.
These mode lines came from the EDIDs of the computer graphics video inputs of different 1080p monitors:"


Monitor 1 – LG LCD 
• Detailed timing #1....... 1920x1080p at 60Hz (16:9) 
• Mode line............... “1920x1080” 148.500 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync 
Monitor 2 – Westinghouse LCD 
• Native/preferred timing.... 1920x1080p at 60Hz (16:9) 
• Mode line............... “1920x1080” 138.500 1920 1968 2000 2080 1080 1082 1087 1111 +hsync -vsync 
Monitor 3 – Samsung LCD 
• Native/preferred timing.. 1920x1080p at 60Hz (16:9) 
• Mode line............... “1920x1080” 138.500 1920 1968 2000 2080 1080 1083 1088 1111 +hsync -vsync 
Monitor 4 – Panasonic Plasma 
• Detailed timing #1....... 1920x1080p at 60Hz 
• Mode line............... “1920x1080” 148.500 1920 2008 2052 2200 1080 1084 1089 1125 -hsync –vsync 
Monitor 5 – Vizio LCD 
• Native/preferred timing.. 1920x1080p at 60Hz 
• Mode line............... “1920x1080” 136.500 1920 1952 1984 2048 1080 1081 1084 1111 +hsync +vsync 

"You can clearly see that while all these monitors claim to be 1920x1080 monitors, they each support a different version of 1920x1080. It is also clear that describing active pixels alone is not specific enough to define a resolution. Display manufacturers have taken to producing non-standard displays, because the specific timings are completely described in the EDID of the monitors they build. When a computer is connected directly to any of these monitors, the mode line is read by the PC and automatically the PC modifies its output to comply properly with that display."



Now with the edid file I can get my VGA to HDMI adapter to work with full 1920x1080 resolution automatically or using the "Mode 0" modeline from the edid file I can get xrandr to work. The VGA to HDMI output really looks good on the tv.

Friday, July 19, 2019

Non blocking reads in lua

So I wanted to try reading some midi data from my keyboard with lua and ubuntu. I installed lua 5.3 and lua posix with "sudo apt install lua5.3 lua-posix"


Then I plugged in my M-Audio Keyrig 49 to the usb and tested it with "aseqdump -l" to list the midi devices then "aseqdump -p 24:0" since it came up on port 24:0.

Ok, so now for the lua (something quick and hacky to test it):

The keyrig will generate 0x90 key on and always 3 bytes for each midi message (0x90 status, then pitch, the velocity) so that makes it really easy.


and some sample output:


................................................

90
3b
39
KEY=59 VELOCITY=57
.......................*.........................
9
90
3c
36
KEY=60 VELOCITY=54
.......................**........................
6
90
3e
23
KEY=62 VELOCITY=35
.......................**.*......................

Saturday, May 4, 2019

MTU 80 Column 3d hat

I remember this program that I typed in from a magazine years ago that would draw a neat 3d function. So let's see if we can find it:


https://j-b.livejournal.com/268176.html
Atari 8-bit "Archimedes Spiral" demo - FOUND!


I searched google for:
mtu commodore pet graphics "high-resolution"
which led me to an ebay ad and if you look closely it says "May 1981" so let's see what we can find for ads for MTU in may 1981.





Micro, the 6502 magazine, may 1981 page
http://archive.6502.org/publications/micro/micro_36_may_1981.pdf

I found the original source for the ebay ad picture:

https://archive.org/details/creativecomputing-1981-05/page/n67





And another page that mentions the MTU ad and rewriting it in 68000

http://www.easy68k.com/paulrsm/dg/dg07.htm


It was originally for the PET with a MTU graphics board, but it wasn't hard to convert to Apple II Applesoft Basic, but I kept getting illegal quantity errors on the hplots being outside of the range 0-279 for x and 0-191 for y so there's code to keep them within range.

You can paste the program into mame's lua console and then unthrottle with F10 and set the frameskip to skip 10/10 it to run it really fast. If you shrink the mame window it will go even faster. I think I can get it to 1200% on my system so it only takes about 8 minutes.



emu.keypost([[
   NEW
 10 HGR2 : HCOLOR=3
 20 P=160 : Q=100
 30 XP=120:XR=1.5*3.1415927
 40 YP=56:YR=1:ZP=64
 50 XF=XR/XP:YF=YP/YR:ZF=XR/ZP
 60 FOR ZI=-Q TO Q-1
 70 IF ZI<-ZP OR ZI>ZP GOTO 150
 80 ZT=ZI*XP/ZP:ZZ=ZI
 90 XL=INT(.5+SQR(XP*XP-ZT*ZT))
 100 FOR XI=-XL TO XL
 110 XT=SQR(XI*XI+ZT*ZT)*XF:XX=XI
 120 YY=(SIN(XT)+.4*SIN(3*XT))*YF
 130 GOSUB 170
 140 NEXT XI
 150 NEXT ZI
 160 STOP
 170 X1=XX+ZZ+P
 180 Y1=YY-ZZ+Q
 181 IF Y1<1 THEN Y1=1  : REM MUST BE 1 OR ERROR IN 210
 182 IF Y1>191 THEN Y1=191
 183 IF X1<0 THEN X1=0
 184 IF X1>279 THEN X1=279
 190 HCOLOR=3:HPLOT X1,191-Y1
 210 HCOLOR=0:HPLOT X1,191-(Y1-1) TO X1,191-0
 220 RETURN
 RUN
]])


I also like this applesoft program to plot the gaussian distribution in 3d on codegolf:

https://codegolf.stackexchange.com/questions/123039/plot-the-gaussian-distribution-in-3d/123079


Wednesday, March 27, 2019

Some Ubuntu resume weirdness, lose mouse, sound



For some reason, I keep losing my mouse on resume. I can unplug it from the top of my keyboard and then plug it in and it will come back. I've also noticed that it will come back properly if I keep moving the mouse during the resume process, until the screen comes back and I can see the mouse moving. What's weird when it happens is that the scroll wheel works, but I can't move the mouse at all until doing an unplug/replug cycle.


Also sometimes I will lose my sound which is pretty irritating.



https://superuser.com/questions/845645/pulseaudio-how-to-rescan-audio-devices



https://askubuntu.com/questions/517578/no-sound-after-suspend-standby


This command will re-detect the sound devices:


pacmd unload-module module-udev-detect && pacmd load-module module-udev-detect



Also you can ask alsa to force reload itself, just doing sudo alsa force-reload didn't bring my sound back, I also had to do the pacmd unload-module module-udev-detect && pacmd load-module module-udev-detect.



sudo alsa force-reload
cat /proc/asound/cards
pacmd list-sinks
pacmd unload-module module-udev-detect && pacmd load-module module-udev-detect
pacmd list-sinks