Multiple monitors without EDID on Linux

I've been wanting to make this work for a long time, but the two times I tried to configure it I gave up because I just didn't know what else to do. This time I sat down and didn't get up until it worked. I worked on the xorg.conf several times before, so I know my way around it. It was still quite a puzzle for me to get working.

If you want to know how to configure a display without EDID on Linux, click here.

First I tried using the X way. Multiple Monitors with a Screen each, using one Device, put together in a ServerLayout. That didn't work for me. I changed it up a lot, and the best result I got was a native resolution with too high of a refresh rate and a distorted display. I was unable to manipulate this via xrandr.

I then read about a method that utilizes the NVIDIA driver called TwinView. This ended up working after a little tweaking. I also consulted the driver's manual to check what the X options and parameters thereof are. I think that manual might be a little outdated, but it gave me some of the right information.

Okay, so short interlude. My primary monitor doesn't supply EDID information, so I had to configure the xorg.conf manually to operate Debian. I had to fill in horizontal sync, vertical refresh, display size, a mode line. The additional monitor does not need any special configuration, so I thought.. Hey, I just need to configure the first monitor with the UseEDID options and the second one will work just like that! Well... no. Maybe it's possible somehow, but I couldn't get it working.

Here's the working config.

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "QNIX"
    ModelName      "QX2710"
    HorizSync       89.52 - 160.0
    VertRefresh     59.96 - 120.0
    DisplaySize     597 336 
    Modeline       "2560x1440_60.00"  312.25  2560 2752 3024 3488  1440 1443 1448 1493 -hsync +vsync
    Option         "DPMS"

Section "Monitor"
    Identifier     "Monitor1"
    VendorName     "Samsung"
    ModelName      "SyncMaster 2253LW"
    HorizSync       31.469 - 79.976
    VertRefresh     59.883 - 75.062
    DisplaySize     467 295
    Modeline       "1680x1050_60.00"  146.25  1680 1784 1960 2240  1050 1053 1059 1089 -hsync +vsync
    Option         "DPMS"

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce GTX 480"
    Option         "NoLogo"

    Option         "UseEDID" "False"
    Option         "UseEDIDDPI" "False"
    Option         "UseEDIDFreqs" "False"
    Option         "ExactModeTimingsDVI" "True"

    Option         "TwinView"
    Option         "HorizSync"      "DVI-I-2: 89.52 - 160.0; DVI-I-3: 31.469 - 79.976"
    Option         "VertRefresh"    "DVI-I-2: 59.96 - 120.0; DVI-I-3: 59.883 - 75.062"
    Option         "MetaModes"      "DVI-I-2: 2560x1440_60.00 +0+0, DVI-I-3: 1680x1050_60.00 +2560+390"


Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    SubSection     "Display"
        Depth       24

Additional to the definitions in the Monitor sections, I added the HorizSync, VertRefresh and Metamode values to the Device section. If you need the output device names, you can use xrandr without parameters.


Generating a PGP key for Retroshare

So, exactly a month ago I've been playing around with Retroshare. I liked the idea that you use your PGP key as an identifier, but soon hit a brick wall: my key had sub-keys. Specifically, a sub-key for encryption. I posted the issue to Retroshare's Twitter and they shortly after confirmed my issue. I had no idea how to create a plain, no-subkey PGP key. But it's so simple!

First, open a Terminal and run gpg with the --gen-key ("generate key") parameter.
gpg --gen-key
You will be given a choice.
Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Enter 4. Next, it will ask for the size of your key. Default is 2048, but I suggest 4096. Now it will ask you for the expiration date. You don't have to set one, but it's good to have, if you plan on creating a new key at some point, maybe because of increased security standards like keylengths of 6144 or different key formats or ciphers. That way people are forced to check for a newer key.
You have to enter a name, e-mail and optionally a comment. Confirm the data input with o and enter your passphrase twice. Your key will now be generated.
You will see something like:
gpg: key 968328E7 marked as ultimately trusted
public and secret key created and signed.
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   7  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 7u
gpg: next trustdb check due at 2018-08-11
pub   4096R/968328E7 2014-03-25
      Key fingerprint = 9F72 21B4 671F F9B1 D6E3  CEA6 17E8 DFDF 9683 28E7
uid                  Sāfto Rangen <orangensaft@kriswema.de>
It's time to export your key!
gpg -a --export 968328E7 > 968328E7.asc
gpg -a --export-secret-keys 968328E7 >> 968328E7.asc
This will create a combined public/secret keyfile called 968328E7.asc which you can use with Retroshare.


Big data

Time to delete some of the content I've posted on Facebook, Twitter and other social networks (read: "social media marketing platforms").

FB> you grant us a non-exclusive, transferable, sub-licensable, royalty-free, worldwide license to use any IP content that you post on or in connection with Facebook (IP License). This IP License ends when you delete your IP content or your account unless your content has been shared with others, and they have not deleted it.
-> https://www.facebook.com/legal/terms
-> https://entropia.de/~krt/msg/2014-02-20T20:42:37Z.msg

Do yourself a favor and give it a read. Scary.

Also, I just downloaded all my FB data. Scared the shit out of me again. I mean, it's not like I didn't know they store all this data, but it's very scary to be punched in the face with a list of 290 IP addresses that I used, the times I logged in, the email addresses of all of my contacts.. Holy shit, man. Why.


Installing BTSync properly on Debian

Download the appropriate version of BitTorrent Sync and open a terminal on your Download directory. The archives have various names, so I'll just use a generic one. First, extract the executable.
tar xf btsync.tar.gz
Then, move it to the user binaries folder.
sudo mv btsync /usr/bin
Now, open up your scheduling configuration.
crontab -e
To the bottom of the file, add this:
@reboot btsync --config ~/.config/btsync/btsync.json
Exit the editor. Now, create the folder and the file. Choose a port and change it to something you like (the "listen" attribute under "webui"). You may also add "username" and "password" to this, although you don't have to. These will be configurable later through the UI.
Important: the file paths in the config file have to be absolute, don't use the ~ variable here!
mkdir -p ~/.config/btsync
sensible-editor ~/.config/btsync/btsync.json
  "storage_path" : "/home/username/.config/btsync",
  "pid_file" : "/home/username/.config/btsync/btsync.pid",
  "webui" :
    "listen" : ""
After you're done, simply reboot to work the magic. Or execute btsync with its --config parameter.


Configuring a QNIX QX2710 for Debian Jessie

I already got a lot of the necessary information from a post by Pat Regan that you should definitely read before starting to play around with your settings!

At first I tried to configure my new QX2710 with my old monitor connected, but I figured I might aswell just do it remotely. So I connected to my computer from my laptop via SSH and played around with the xorg.conf. After applying the changes I'd restart lightdm (sudo service lightdm restart) until it worked.

In the meantime my monitor showed me this:

I ended up using HorizSync 89.52 - 160.0, VertRefresh 59.96 - 120.0 and a Modeline generated by cvtHere's the xorg.conf.

Here's a comparison of screen resolutions before - after:

I can finally watch 1080p videos without downscaling!1!!


User Startup Programmes in Debian

I've always loved to start programmes automatically. Just boot up the computer, maybe even log in automatically if it's a desktop at home, and start all the programmes you need. It took me quite a while, but I figured out the one and only, perfect way to do that: *.desktop files.
Let's go to our applications folder, which should contain most of the *.desktop files responsible for your Applications menu.
cd /usr/share/applications/
Let's assume you want to autostart guake. Check for folder contents with ls or find the programme you want to auto start with ls | grep guake. Then, copy that file to your autostart folder.
cp guake.desktop ~/.config/autostart/

Also check out the Desktop Application Autostart specification if you're interested.

Originally published on 2013-01-31 08:19.


FIX: You are missing 32-bit libs: libGL.so.1

So I've been getting an error when trying to start Steam.

Luckily, I know how to use a search engine and quickly found a promising post by frankster. This did not fix my problems - I had to run this line to get Steam to work on my laptop:
sudo apt-get install libgl1-nvidia-glx:i386
Works like a charm. :)