I setup my two screens to be next to each other, after reboot they're in clone mode. Basically a dupe of 325277, the difference being that I think all (both) my screens have a different EDID. kscreen-console : START: Requesting Config kscreen: Primary output changed from KScreen::Output(Id: 88 , Name: "DVI-0" ) ( "DVI-0" ) to KScreen::Output(Id: 88 , Name: "DVI-0" ) ( "DVI-0" ) kscreen: Primary output changed from KScreen::Output(Id: 88 , Name: "DVI-0" ) ( "DVI-0" ) to KScreen::Output(Id: 88 , Name: "DVI-0" ) ( "DVI-0" ) Received config. Took 22 milliseconds Screen: maxSize: QSize(16384, 16384) minSize: QSize(320, 200) currentSize: QSize(2880, 1200) ----------------------------------------------------- Id: 85 Name: "DisplayPort-0" Type: "Unknown" Connected: false ----------------------------------------------------- Id: 86 Name: "DisplayPort-1" Type: "Unknown" Connected: false ----------------------------------------------------- Id: 87 Name: "HDMI-0" Type: "Unknown" Connected: false ----------------------------------------------------- Id: 88 Name: "DVI-0" Type: "Unknown" Connected: true Enabled: true Primary: true Rotation: 1 Pos: QPoint(1280,0) MMSize: QSize(367, 275) Size: QSize(1600, 1200) Clones: None Mode: "91" Preferred Mode: "91" Preferred modes: ("91") Modes: "100" "" QSize(640, 480) 60 "101" "" QSize(720, 400) 70.0817 "91" "" QSize(1600, 1200) 60 "92" "" QSize(1280, 1024) 75.0247 "93" "" QSize(1280, 1024) 60.0197 "94" "" QSize(1152, 864) 75 "95" "" QSize(1024, 768) 75.0762 "96" "" QSize(1024, 768) 60.0038 "97" "" QSize(800, 600) 75 "98" "" QSize(800, 600) 60.3165 "99" "" QSize(640, 480) 75 EDID Info: Device ID: "xrandr-DELL 2001FP-C088141F06YL" Name: "DELL 2001FP" Vendor: "" Serial: "C088141F06YL" EISA ID: "" Hash: "7a131aded027d4cee9b9d1bd9ced6cda" Width: 41 Height: 31 Gamma: 2 Red: QQuaternion(scalar:1, vector:(0.637695, 0.339844, 0)) Green: QQuaternion(scalar:1, vector:(0.292969, 0.608398, 0)) Blue: QQuaternion(scalar:1, vector:(0.146484, 0.0673828, 0)) White: QQuaternion(scalar:1, vector:(0.3125, 0.328125, 0)) ----------------------------------------------------- Id: 89 Name: "DVI-1" Type: "Unknown" Connected: true Enabled: true Primary: false Rotation: 1 Pos: QPoint(0,0) MMSize: QSize(338, 270) Size: QSize(1280, 1024) Clones: None Mode: "92" Preferred Mode: "93" Preferred modes: ("93") Modes: "100" "" QSize(640, 480) 60 "101" "" QSize(720, 400) 70.0817 "102" "" QSize(1024, 768) 75.0286 "103" "" QSize(832, 624) 74.5513 "92" "" QSize(1280, 1024) 75.0247 "93" "" QSize(1280, 1024) 60.0197 "94" "" QSize(1152, 864) 75 "95" "" QSize(1024, 768) 75.0762 "96" "" QSize(1024, 768) 60.0038 "97" "" QSize(800, 600) 75 "98" "" QSize(800, 600) 60.3165 "99" "" QSize(640, 480) 75 EDID Info: Device ID: "xrandr-L1720B-105487" Name: "L1720B" Vendor: "" Serial: "105487" EISA ID: "" Hash: "76b62af2c36e3d5e9fdaeebe614093eb" Width: 34 Height: 27 Gamma: 2 Red: QQuaternion(scalar:1, vector:(0.640625, 0.339844, 0)) Green: QQuaternion(scalar:1, vector:(0.291992, 0.611328, 0)) Blue: QQuaternion(scalar:1, vector:(0.147461, 0.0683594, 0)) White: QQuaternion(scalar:1, vector:(0.313477, 0.329102, 0)) kscreen: Primary output changed from KScreen::Output(Id: 88 , Name: "DVI-0" ) ( "DVI-0" ) to KScreen::Output(Id: 88 , Name: "DVI-0" ) ( "DVI-0" ) kscreen: Primary output changed from KScreen::Output(Id: 88 , Name: "DVI-0" ) ( "DVI-0" ) to KScreen::Output(Id: 88 , Name: "DVI-0" ) ( "DVI-0" ) Screen: maxSize: QSize(16384, 16384) minSize: QSize(320, 200) currentSize: QSize(2880, 1200) ----------------------------------------------------- Id: 85 Name: "DisplayPort-0" Type: "Unknown" Connected: false ----------------------------------------------------- Id: 86 Name: "DisplayPort-1" Type: "Unknown" Connected: false ----------------------------------------------------- Id: 87 Name: "HDMI-0" Type: "Unknown" Connected: false ----------------------------------------------------- Id: 88 Name: "DVI-0" Type: "Unknown" Connected: true Enabled: true Primary: true Rotation: 1 Pos: QPoint(1280,0) MMSize: QSize(367, 275) Size: QSize(1600, 1200) Clones: None Mode: "91" Preferred Mode: "91" Preferred modes: ("91") Modes: "100" "" QSize(640, 480) 60 "101" "" QSize(720, 400) 70.0817 "91" "" QSize(1600, 1200) 60 "92" "" QSize(1280, 1024) 75.0247 "93" "" QSize(1280, 1024) 60.0197 "94" "" QSize(1152, 864) 75 "95" "" QSize(1024, 768) 75.0762 "96" "" QSize(1024, 768) 60.0038 "97" "" QSize(800, 600) 75 "98" "" QSize(800, 600) 60.3165 "99" "" QSize(640, 480) 75 EDID Info: Device ID: "xrandr-DELL 2001FP-C088141F06YL" Name: "DELL 2001FP" Vendor: "" Serial: "C088141F06YL" EISA ID: "" Hash: "7a131aded027d4cee9b9d1bd9ced6cda" Width: 41 Height: 31 Gamma: 2 Red: QQuaternion(scalar:1, vector:(0.637695, 0.339844, 0)) Green: QQuaternion(scalar:1, vector:(0.292969, 0.608398, 0)) Blue: QQuaternion(scalar:1, vector:(0.146484, 0.0673828, 0)) White: QQuaternion(scalar:1, vector:(0.3125, 0.328125, 0)) ----------------------------------------------------- Id: 89 Name: "DVI-1" Type: "Unknown" Connected: true Enabled: true Primary: false Rotation: 1 Pos: QPoint(0,0) MMSize: QSize(338, 270) Size: QSize(1280, 1024) Clones: None Mode: "92" Preferred Mode: "93" Preferred modes: ("93") Modes: "100" "" QSize(640, 480) 60 "101" "" QSize(720, 400) 70.0817 "102" "" QSize(1024, 768) 75.0286 "103" "" QSize(832, 624) 74.5513 "92" "" QSize(1280, 1024) 75.0247 "93" "" QSize(1280, 1024) 60.0197 "94" "" QSize(1152, 864) 75 "95" "" QSize(1024, 768) 75.0762 "96" "" QSize(1024, 768) 60.0038 "97" "" QSize(800, 600) 75 "98" "" QSize(800, 600) 60.3165 "99" "" QSize(640, 480) 75 EDID Info: Device ID: "xrandr-L1720B-105487" Name: "L1720B" Vendor: "" Serial: "105487" EISA ID: "" Hash: "76b62af2c36e3d5e9fdaeebe614093eb" Width: 34 Height: 27 Gamma: 2 Red: QQuaternion(scalar:1, vector:(0.640625, 0.339844, 0)) Green: QQuaternion(scalar:1, vector:(0.291992, 0.611328, 0)) Blue: QQuaternion(scalar:1, vector:(0.147461, 0.0683594, 0)) White: QQuaternion(scalar:1, vector:(0.313477, 0.329102, 0)) kscreen: Primary output changed from KScreen::Output(Id: 88 , Name: "DVI-0" ) ( "DVI-0" ) to KScreen::Output(Id: 88 , Name: "DVI-0" ) ( "DVI-0" ) kscreen: Primary output changed from KScreen::Output(Id: 88 , Name: "DVI-0" ) ( "DVI-0" ) to KScreen::Output(Id: 88 , Name: "DVI-0" ) ( "DVI-0" ) Screen: maxSize: QSize(16384, 16384) minSize: QSize(320, 200) currentSize: QSize(2880, 1200) ----------------------------------------------------- Id: 85 Name: "DisplayPort-0" Type: "Unknown" Connected: false ----------------------------------------------------- Id: 86 Name: "DisplayPort-1" Type: "Unknown" Connected: false ----------------------------------------------------- Id: 87 Name: "HDMI-0" Type: "Unknown" Connected: false ----------------------------------------------------- Id: 88 Name: "DVI-0" Type: "Unknown" Connected: true Enabled: true Primary: true Rotation: 1 Pos: QPoint(1280,0) MMSize: QSize(367, 275) Size: QSize(1600, 1200) Clones: None Mode: "91" Preferred Mode: "91" Preferred modes: ("91") Modes: "100" "" QSize(640, 480) 60 "101" "" QSize(720, 400) 70.0817 "91" "" QSize(1600, 1200) 60 "92" "" QSize(1280, 1024) 75.0247 "93" "" QSize(1280, 1024) 60.0197 "94" "" QSize(1152, 864) 75 "95" "" QSize(1024, 768) 75.0762 "96" "" QSize(1024, 768) 60.0038 "97" "" QSize(800, 600) 75 "98" "" QSize(800, 600) 60.3165 "99" "" QSize(640, 480) 75 EDID Info: Device ID: "xrandr-DELL 2001FP-C088141F06YL" Name: "DELL 2001FP" Vendor: "" Serial: "C088141F06YL" EISA ID: "" Hash: "7a131aded027d4cee9b9d1bd9ced6cda" Width: 41 Height: 31 Gamma: 2 Red: QQuaternion(scalar:1, vector:(0.637695, 0.339844, 0)) Green: QQuaternion(scalar:1, vector:(0.292969, 0.608398, 0)) Blue: QQuaternion(scalar:1, vector:(0.146484, 0.0673828, 0)) White: QQuaternion(scalar:1, vector:(0.3125, 0.328125, 0)) ----------------------------------------------------- Id: 89 Name: "DVI-1" Type: "Unknown" Connected: true Enabled: true Primary: false Rotation: 1 Pos: QPoint(0,0) MMSize: QSize(338, 270) Size: QSize(1280, 1024) Clones: None Mode: "92" Preferred Mode: "93" Preferred modes: ("93") Modes: "100" "" QSize(640, 480) 60 "101" "" QSize(720, 400) 70.0817 "102" "" QSize(1024, 768) 75.0286 "103" "" QSize(832, 624) 74.5513 "92" "" QSize(1280, 1024) 75.0247 "93" "" QSize(1280, 1024) 60.0197 "94" "" QSize(1152, 864) 75 "95" "" QSize(1024, 768) 75.0762 "96" "" QSize(1024, 768) 60.0038 "97" "" QSize(800, 600) 75 "98" "" QSize(800, 600) 60.3165 "99" "" QSize(640, 480) 75 EDID Info: Device ID: "xrandr-L1720B-105487" Name: "L1720B" Vendor: "" Serial: "105487" EISA ID: "" Hash: "76b62af2c36e3d5e9fdaeebe614093eb" Width: 34 Height: 27 Gamma: 2 Red: QQuaternion(scalar:1, vector:(0.640625, 0.339844, 0)) Green: QQuaternion(scalar:1, vector:(0.291992, 0.611328, 0)) Blue: QQuaternion(scalar:1, vector:(0.147461, 0.0683594, 0)) White: QQuaternion(scalar:1, vector:(0.313477, 0.329102, 0)) Reproducible: Always
I can confirm that problem. Kscreen does not handle multihead setups very well. I have many different scenarios besides the expected one. Using 3 monitors (1 laptop, 2 connected to docking station), expected setup is: left: laptop center: external monitor 1 (primary output) right: external monitor 2 Scenario 1: I have all outputs placed over each other Scenario 2: Outputs are placed correctly, primary output is laptop Scenario 3: Outputs are placed correctly, primary output is ext1, widgets are on ext1, however panel after some dancing between laptop and ext1 ends up on laptop screen And after manually setting up correct configuration I need to restart plasmashell to get app launcher show up on correct screen - it often shows on left screen not center when panel is. Removing laptop from dock, assuming that kscreen detects that action, messes up all configuration - plasmashell needs to be restarted again. Placing laptop back again on dock - messed up configuration - it's easier to reboot and setup everything again from scratch. Same happens with single monitor attached directly to laptop via HDMI. Expected setup is: left: laptop (primary) right: external monitor I don't have problems with primary output then because I want it to be laptop - so no work for kscreen/kde here and nothing to mess up. However kscreen does not detect disconnecting external monitor. OS: Chakra kscreen/libkscreen version: 5.5.4 plasma-framework: 5.18.0
Martin, could you post the content of the files in ~/.local/share/kscreen after setting it up, and then after rebooting? This way, we can find out if the kscreen kded module saves the config correctly. If it doesn't, the changes will only keep effect until you restart your X server (for example during a reboot). If the file isn't saved for some reason, your config will obviously be lost across reboots. It would also be useful to see the output from kded5, in order to acquire that, you can stop kded5 and restart it from a terminal, like so: kquitapp5 kded5 kded5 There will be some unrelated stuff. If you have 5.6, you may enable logging for kscreen by configuring categorized logging in ~/.config/QtProject/qtlogging.ini (create the file if it isn't there): [Rules] kscreen.*=true
Created attachment 98863 [details] before reboot, all set up ok
Created attachment 98864 [details] After reboot, bad screen configuration
Created attachment 98865 [details] kded5 stderr Restart of kded5 with the bad screen configuration, with subsequent setup of correct configuration.
Created attachment 98866 [details] kded5 stderr with correct setup After setting up the screen config, I killed kded5 and started it once more. Config stayed ok. This is the stderr. Sorry for the delay...
for some reason, once a couple of minutes, kded5 keeps outputting kscreen: starting external backend launcher for "" kscreen.kded: Change detected kscreen.kded: Saving current config to file kscreen.kded: Calculating config ID for KScreen::Config(0x1b82e50) kscreen.kded: Part of the Id: "7a131aded027d4cee9b9d1bd9ced6cda" kscreen.kded: Part of the Id: "76b62af2c36e3d5e9fdaeebe614093eb" kscreen.kded: Config ID: "43656861fc5bd49b298b3988a44c0fe9" kscreen.kded: Config saved on: "/home/martin/.local/share/kscreen/43656861fc5bd49b298b3988a44c0fe9"
*** Bug 363495 has been marked as a duplicate of this bug. ***
Just a side note. I noticed that in older kscreen files held in ~./local/share/kscreen some of the names given to monitors changed. Example: "name": "HDMI-2" become "name": "HDMI2" after deleting the kscreen files with newer versions of the system. Could there be a failure to lock on to the proper configurations due to naming? Maybe people need to delete their kscreen files and get new ones created.
After some debugging, I found a race condition which may cause this bug. (I can't say for sure since I can reproduce the race, but can't reproduce the exact problem you have.) What happens is that on login, a config is applied that triggers a changed signal, which will write out the config. This doesn't make sense and it may actually lead to writing out intermediate, wrong configs, which are then applied on next login. Essentially, this patch makes the kded kscreen daemon more careful about writing out configs. In earlier patches, I've made the code more robust against corrupt configs, that may also help a bit in this situation. This is Plasma 5.7 material. There's a patch addressing this race condition up for review: https://phabricator.kde.org/D1730
Git commit 17199d32f292f7c44eb8cdce5b35396d3bd19eb8 by Sebastian Kügler. Committed on 01/06/2016 at 14:55. Pushed by sebas into branch 'master'. address race condition around setoperation Summary: Use a timer to avoid catching configChanged signals after we set changes. The long version: TL;DR: We have a race condition when the kscreen daemon starts. It looks up a known config, then applies it and subsequently resaves the config. The same happens on config changes, it writes, then re-reads and then re-writes the config change. I've managed to prevent this from happening by adding a timer that does avoids saving the config as a direct reaction to our own config changes. So what happens on kded5 startup after loading the kscreen2 module: - the kscreen config is requested and received - the kscreen daemon (KD) looks into its config directory for a suitable config file (a config file is identified by a combined hash of all screen attached, so unique per connected set of outputs) - KD usually finds a config - KD ignores configChanged events before it starts ... - a KScreen::SetConfigOperation to apply the "known config" - SetConfigOperation returns after a while (say 100ms later) - we re-enable the change monitor - we receive a configChanged signal - we save the new config (usually to the existing config file) I don't think this behavior is desirable. I don't see a reason why the daemon should save its config right after applying it. I think this causes more problems than we want, since the startup may overwrite the user's config. This behavior seems to be desired by the code in KD, it's already blocking configChanged signals during the SetOperation (which, to be honest may result in nightmarish behavior in any way, so it might be a kludge which aims too short). >From libkscreen perspective, SetConfigOperation::finished cannot guarantee that all configChanged signals are already fired and that it's safe to watch for new, independent changes now. At least on X11, we simply don't know, and what we can do is wait a bit and cross fingers that we're not catching our own noise. The changed signal *may* come from a re-request of the edid information, but this is a bit hard to track down, and not too useful, anyway, since changed Edid may affect a large number of a screen's properties. In the Wayland backend, that's a different story and we can prevent this behavior at an earlier stage, so this timer is "probably not needed" (I haven't tested that). This effectively prevents KD from catching reactions to its own changes and does not trigger saving the config file on every login. It still reacts to changes from libkscreen, but will avoid re-saving the config a few times. The timer may not be the neatest of solutions for this, but it does help narrowing down the problem and may be a last resort action. Most importantly, it avoids the re-writing of the config on startup and plugging/unplugging a monitor effectively. The timer value of 100ms is also used in kwin, which should make the behavior (which is no problem in kwin) more solid. Related: bug 346961 Reviewers: graesslin Reviewed By: graesslin Subscribers: plasma-devel, #plasma Tags: #plasma Differential Revision: https://phabricator.kde.org/D1730 M +12 -1 kded/daemon.cpp M +2 -0 kded/daemon.h http://commits.kde.org/kscreen/17199d32f292f7c44eb8cdce5b35396d3bd19eb8
See bug #356225 and especially #356225 comment 103: > Help is on the way. Plasma 5.7 will/should fix this issue. > http://vizzzion.org/blog/2016/05/multiscreen-in-plasma-5-7-and-beyond/
The code should respect an existing monitor that is operating, and not disturb it if processing another new one coming available. If I turn on a second monitor my whole desktop gets switched off and redrawn on all monitors, like a reset. Even the background image changes. Sometimes the windows are moved to suit a transitional playing field. If I want windows are precise places they have to be moved back which is very annoying.
@e8hffff Please test Plasma 5.7 with Qt 5.6. If your problems persist, please file a separate bug report. Your issue is otherwise unrelated, it's not really helpful to add it to this bugreport, the available information is hard enough to sift through already.
Good news. We have fixed two race conditions in the daemon that applies the config on login and on monitor changes. Also, Plasma shell has now moved away from KScreen and uses QScreen for setting up the desktop, panels, etc. This makes the desktop shell work a lot smoother on screen changes. Kai Uwe and Martin systems don't show this bug anymore, so I'm quite confident that Plasma 5.7 brings a notable improvement, so it would be good to get some more feedback from people who are able to test. Plasma 5.7 Beta which is due in mid-June would be a good target, otherwise more testing of git master would also be great. I'm not closing this bug report as RESOLVED FIXED just yet, but I think we're a lot closer.
Haven't booted into wrong screen setup since I installed KF23 and plasma 5.7 beta. Very nice :)
How can I install Plasma 5.7 using dnf on Fedora 24?
Okay, thanks for the confirmation!
From bug #356225 comment 127: "While the comment was made that KDE Plasma Version 5.7 was going to resolve problems with an external display, I have found that it has made these problems worse!" I don't think one confirmation (comment 16) is enough to close a bug…
hi, my config is dual monitor with a desktop PC ( so no plug/unplug screen variation ). I have git versions (KF24 and Plasma 5.7) and from a while all works fine, no re-setup screens after reboot.. ohh is nice, thanks ;-)
@Piotr I count at least five individual and verified confirmations that this bug is fixed, including the reporter of this bug himself. I mentioned two people confirming it fixed in comment #15. The comment you quote is from an entirely different bug, it's not useful in this context. Nobody said that every single multiscreen bug has been fixed (I wish we had!). It's incremental work of fixing a number of bugs that make up a stable user experience. This particular one is down, and I'm happy about that. Yay. :)