Search This Blog

Saturday, September 17, 2011

Plasma NM: usability changes

Solid Sprint is going to start in less than two weeks in Madrid. This time one of the attendees (Björn Balazs) is an usability guy, so we are going to talk about usability problems in the software we maintain, in my case Plasma NM. Some days ago Björn asked about the points we (the other attendees) would like to discuss during the sprint. Well, I already sent my list, which is not that extense but is not short either:

In the last months I have received several complaints about Plasma NM user interface. I have also thought about what I could change and today I decided to implement some of my thoughts in my private Plasma NM repository. What you are going to see is not a mock up :-)

For those who do not believe that is not a mock up, here is the screencast:

Those changes are not final. I am going to discuss them with Björn Balazs and the other Solid guys before commiting anything. This is post is to present and ask comments about them. Do not expect any GUI changes in Plasma NM before the end of the sprint next month.

Update: answering some questions:

  • @damian, 1. the "Enable" checkboxes are there not only for users clicking on them but also for NetworkManager daemon  to inform which features are enabled. NM can disable network, wireless and mobile brodband without user intervention, if I move the checkboxes to the interfaces tab then users will have to go to interfaces tab to see why there is no connection listed when wireless is disabled for instance. Also, mobile broadband is always disabed by default by NM daemon, so for mobile broadband connections checking the "Enable mobile broadband" checkbox is required. Well, actually if you click on the mobile broadband connection it will enable mobile broadband, so it is not required :-) But if the modem takes too much time to active itself the connection can times out and some modems, like my Sony MD300, can be activated only once by NM. After that I have to remove it from the USB port and plug it again to make another connection. In resume: keeping the checkboxes in the connection list tab saves one click in some situations. 2. I like the fact that I can access the details tab by clicking on one active connection, specially because now there is no visible way to associate one interface to one connection. Think about people who have more than one instance of the same interface type. I have a 3G modem and when I plug my cellphone I will have a second gsm interface. I can connect the same Gsm connection using either device. In this case it is usefull to get to the interface details by clicking on the connection instead of first figuring out which network interface is activated and then clicking on it. 3. I like the "Show More" button (now "Show all" checkbox) and it is going to stay there as long as I am working on Plasma NM :-P. The item is required because of the way NM work. I explain: after creating a hidden wifi connection it HAS to be activated so that NM uses wpa_supplicant's ap_scan=2 option to search for it. NM uses ap_scan=1 by default, do not ask me why, maybe to save power or to be faster, I do not know. When using ap_scan=1 wpa_supplicant does not search for hidden networks, with ap_scan=2 it does. So I need a way to ask the ssid and activate the hidden network after it has been created. It is not a normal connection because normal connections do have to be activated right after creating them. Maybe adding a new "Hidden" checkbox in wireless dialog is better, but since there are two bug entries about the complexity of creating connections I am not willing to add more widgets to connection dialogs.
  • @Anonymous, I will change Plasma NM to save the "Show More" state across restarts. Maybe I can add a option in "Manage Connections" -> Other to always show all connections. When it is activated I can hide the "Show More" button / "Show all" checkbox. "when the mouse cursor is floating over a interface of the list it should change the line of the video that says 'Connected to xxxxxxx' with 'Click to disable' if the interface is enabled & 'Click to enable' if the interface is disabled." It is good suggestion, I will see what I can do. Just keep in mind that wired ethernet cannot be enable/disabled in NM, only wireless and mobile broadband can. The "mini-icon" (disconnect button) on the interface item only appears if there is one activated connection using that interface. I do not see a need to change colors to indicate the connection state. Also, keep in mind that there are daltonian people (like me) out there who have difficulty to distinguish colors, specially in tiny buttons like that one. I prefer to show/hide the tiny button, it is more visible. OBS: although I am daltonian I can distinguish between red and green, there are several levels of daltonism, luckily for me mine is not that severe.
  • @Srk9, unfortunately NM's API does not provide means to change the default route from one network interface to another, so it is not possible for me to implement your suggestion.
  • @Anonymous, yes, there are some artifacts in Plasma NM GUI, but they are not as bad as in the youtube video, which was recorded at 15 frames per second by the way. I will use 30 fps the next time I do a screencast, I think youtube trancodes the video to 15 fps, right? Some of the "artifacts" in the video are actually Plasma effects, they look much better in real time :-). In fact, the only two artifacts that really happens in the video happen when changing the network interface used in interface details tab and when clicking on the "Show all" checkbox. The connection list is a Plasma::ScrollWidget class, which adds all items first before creating the vertical scrollbar and shrinking the visible part of the list. That is a bug (or whatever you want to call it) in Plasma::ScrollWidget triggered by the fact that all QGraphicsWidget (Plasma's widget base class) are shown by default, in contrast to the hidden default used in QWidget class used by most KDE's software.
  • @emilsedgh, allowing to select which interface details to show is already a pending implementation. You can enable notifications to show the connection state, just to go Manage Connections (or system settings -> Network Settings) -> Other -> Configure Notifications and enable "Establishing Network Connection" and "Network Connection Succeed". You can enable "Interface changed state" instead but it is more "verbose". The system tray icon also shows the connection state change, but I agree that it is really subtle.
  • @Anonymous, how is it more complicated? Main window is smaller and there are less widgets in it.
  • @Anthony Vital, thanks for the tip about Plasma::ScrollWidget, it works great. One less artifact in Plasma NM GUI :-)
  • @Anonymous, I kind of like the kickoff plasmoid.
  • @yoda, some people do not like the "Show More" button, they have difficulty to figure out what it really does :-/ So I am trying to keep it there without drawing to much attention. Plasma allows more entries in right click menu icon, I can add some more items there. I just do not know if I can add QAction's there like you suggested. Kmix is not a plasmoid so it is able to add QAction's at will, I just need to figure out if plasmoids can do the same. Update Sep 20: it can, just return the QAction list in contextualActions(). "how I'm supposed to see details of other interface?" For now it works like you described, you need to go back to the Interfaces tab and click on the second interface to see its details. I like the mockup you created, I will join the Details tab to the Interface tab like you suggested. Maybe not exactly like in the mockup but I will. I have just commited to branch nm09 the change to show interface details instead of deactivating the connection when clicking on an active connection. That already works in the youtube video and since it does not change the GUI I do not see why not commiting it now.
  • @Aaron J. Seigo, thanks, I am glad to know people like the changes :-) I plan to save the "Show all" checkox state between restarts. When ready I can change the "Show all" default to enabled and the connection list will be completely visible. Those, like me, who prefer "Show all" unchecked will need to change it only once. I think that is the best solution.
  • @BajK, I am taking the oportunity to talk in person to someone with skills in usability to assist me :-) Well, this commit partially fix your problem: the plasmoid will be shown poped up, but I do not know exactly why the background still keeps the icon's dimensions instead of the popup's dimensions. I will try to figure out why. Update Sep 20: problem fixed.


KAMiKAZOW said...

Looks great. Good work!

damian said...

Looks better!, just a few thoughts,
-I would move the "enable" buttons to the interfaces tab, as they are not very used, and they currently are under the interfaces.
-Maybe details should only be accessible after clicking on an interface, and be showed in there, without changing the tab.
-I would also remove the "show more" and "hidden connection" and replace them by a "new connection" button.
PD: Thanks for your hard work!

Anonymous said...

Almost perfect! (for what should be this type of application :-) )

But there is a problem of redundancy if you still want to mantain the "interfaces" tab AND you have those check boxes in the default tab of connections list.

I suggest to remove all those checkboxes of enable/disable networking/wifi/etc except the "show all" (his current check/inchecked state should be remembered when I reboot the system) & modify the "interfaces" tab for enabling or disabling interfaces when you click over the desired interface.
Futhermore for more usability, when the mouse cursor is floating over a interface of the list it should change the line of the video that says "Connected to xxxxxxx" with "Click to disable" if the interface is enabled & "Click to enable" if the interface is disabled.
Besides that changes if this plasmoid will be used in other kind of devices like tablets (plasma active), etc, then the mini-icon used in that "interfaces" tab should indicate the current state (that red cross==disabled, green check==enabled).

What do you think about these suggestions Lamarque?

I liked a lot

Srk9 said...

This is very nice work. If I may make a suggestion, I would like to suggest that you add a fourth tab for connection management. That would force you to work out how to enable users to control routes, but the basic premise is that if I connect to multiple networks, I should be able to tell network manager which one handles the default route without disconnecting.

Srk9 said...

When I said connection management, I meant route management.

Anonymous said...

There are several graphical glitches in the screencast, don't you see them?

emilsedgh said...

Thanks for making plasma nm rock.
Just a little note. The 'Connection details' has way too much information inside it. I dont think people normally care for 'driver' or 'ssid'.
However, i think it could really use a graphical way of showing the conection state.

Anonymous said...

I'm sorry, but the interface became more complicated.

Anthony Vital said...

About the Plasma::ScrollWidget bug, you can fix this by calling setFlag(QGraphicsItem::ItemClipsChildrenToShape) on it. Funny I encountered the very same bug just yesterday :)

Anonymous said...

COOL! Wish that people behind Kickoff thinks it's time for a usable and less-space redesign of their plasmoid...

yoda said...

yep, this new 'show all' checkbox is kinda hard to see between all that options, old 'show more' button is way better, so why not place all that options under trays icon right mouse click? because it's kde4 and under right click you get fricking panel/widget useless crap, remember tray was supposed to be useful!!

Kmix behave the old way, why not leave panel/widget management to the "cashew" and make tray icons useful again?

OK, lets leve this RMB thing and get to the NM UI, so new one seems to be right idea but networking interfaces are doing nothing! they just list all interfaces, why not make them behave like old on -, clicking them slide in the details panel and get rid of details tab = simpler and more intuitive, just Interfaces and Connections. With thee tab layout as in youtube screencast how I'm supposed to see details of other interface? Click the left tab, click the interface and then jump to right tab just to see details? How is this work anyway?

Even better, think KISS people! get rid of those categories (interfaces, connections, details) and make just one, now when i click connection it switch off :| why? there should nice "X" button, when I click something that isn't "X" I want to reach deeper so it shouldn't disable connection

And some mockup I've made, just for fun maybe some of these ideas you will like ;)

Aaron J. Seigo said...

very nice work ... three tabs is good imo as all the navigation is in one place and it remains very consistent.

i did a show 'n tell here at the house with it and it got major thumbs up! :)

i wouldn't worry too much about the "show all" button being less easy to see, either. i do wonder, however, if a "Show more connections..." entry at the bottom of the list would work? that would put it right where the user is looking if they run out of items in the list. where this could fall down is if the list is very long alread, it might not be visible at the end... but then i'm not sure that's an issue because the user will probably scroll through that list to see what's there? (and it's an edge case...)

in any case, can't wait to see this merged into the mainline

BajK said...

I’m not going to change the interface anytime soon :P I think “anytime soon” has come ;)

Looks definitly great! Can’t wait to use it :)

But could you also address the issue that NM’s tray icon is not a real tray icon somehow? You can not have the interface manager on the desktop as normal widget but it will keep its tray icon shape, i. e. you have to click on it to show the NM interface no matter where it is contained in

Luís said...

Hi. This is great. Thanks for al your hard work. I still have one annoyance left with the network management system. When I connect to the university vpn I have to configure a new proxy. The problem is I have to restore the old config once I logo from the vpn. Is it possible to associate different proxy settings to different connections?

Lamarque said...

@Luís, no, that is not possible at the moment because NM does not support it. KDE has its own proxy configuration, but it also does not implements this feature.

Srk9 said...

On the topic of VPN software, I use OpenVPN with network manager and the plasma widget. Is there any way that the plasma widget could be enhanced to instruct Network Manager to connect to my VPN whenever it connects to certain wireless networks?

Also, is it possible to instruct Network Manager to remove all DNS servers from resolv.conf that are not associated with my VPN when my VPN is connected?

Lamarque said...

@Srk9, NM does not support VPN auto-connect. As a workaround you can use a script in /etc/NetworkManager/dispatcher.d/ to detect that a connection is active and activate your VPN connection. There is an example in the link above.

I do not think it is possible to configure NM to remove DNS entries, it always adds the DNS of all active connections. You can also use a script in /etc/NetworkManager/dispatcher.d to do that for you. I have a script there to override some of NM configurations.

Eduardo said...

Couple of pure usability points for experts.
a. please implement some overlay icon for connecting to VPN, some progress bar like there is connecting to wifi or so
b. please make plasma nm show the icon of interface which has default route (now it shows eth when there are wifi and eth at the same time no matter where the defaul route goes)
c. this is not that important, but: please disable connecting to other VPN's when one is already active (I think we can't connect to 2 VPN's with NM anyway - at least I tried and didn't succeed)
Thank you.

Killsudo said...


Would you have any interest on setting plasma-nm up for logs?

Either have a way to access parsed logs inside the 'Manage Connections' or link to KSystemLog(also need to work with KSystemLog to ensure individual logs of wired/wireless/vpn are parsed from messages?)

Having a VPN just fail to connect is not a welcoming situation for new users. Being able to point the user to a log that contains at least some information would be helpful.

It might also interest some users to see a log of network connection actions like interfaces going up and down or connecting to a different AP.

Have you had any thoughts alone these lines for plasma-nm?

Lamarque said...

@Eduardo, a) and b) are already in my TODO list. c) would cause some trouble to implement. I am trying to add new features but some of them impact performance, so I postpone them until I can figure out a better way to do it.

Fri13 said...

Just nice to see how much love you can give to every NM user out there!

NM is one of the most used plasma widget for those who move laptops around.

The old interface did someway feel "cluttered", I would say because it was big and the left part was more or less "un-needed". Now it is nicely behind "interface" tab (should it be called as "device"?)

One thing I just would want to be changed, it is how easy it is to disconnect from connected network. In video was visible it was possible to go from interface tab or clicking left side of a network list. But should that disconnect button be bigger and all the time visible?

Now I must say I am more than just happy how much you have polished the NM. Next thing is to get the shared network much easier (still I have not managed to get working shared connection, always just disconnects right away on host computer).

PS. You even managed to show a terrible design problem on Plasma. The notifications behind the NM.
Someone really should start working better notification system and plasma locking mechanism as they are still badly broken by design.

riessmi said...

first: nice work.
Wishlist: what about droping the "red X for stoping the connection" and writing the Interface name and a connection sign before the connection name like:
wlan0 -> ((JL)) divilinux
the arrow with hover: "click to disconnect"
the IF with hover "click for details"

Kevin Kofler said...

For the proxy stuff, couldn't the network management kded4 module set the KDE proxy settings once it's done connecting? Something like:
[ ] Use this proxy configuration when connected
and a copy of the proxy KCM

Lamarque said...

@Fri13, I prefer to use "interface" than "device". "Device" refers to a hardware and the VPN Interface in Plasma NM's main window is not associated to any hardware. All other network managers I know also use "interface" instead of "device".

The disconnect button disappears to indicate that the connection is already disconnected. I do not see why keep it when it is not possible to use it.

Wifi shared connections is fragile because of device drivers with poor ad-hoc support. Wired shared connections usually works without problems.

Plasma has some problems, let's see if Plasma2 solves them. I think notification appears behind the plasmoid because the plasmoid is extension of the panel, which is usually is configured to appear above all windows.

@riessmi, I do not see a need to show the interface name all the time. The user is interested in the connection. I do not understand your last two sentences, which arrow and what is the "IF" you mentioned? I prefer to use tooltips than changing the label in connection item when someones hover the connection. The hover event is too sensitive, it would be triggered too often.

@Kevin Kofler, that is possible, but would need some work in Manage Connections and the kded4 module. There are a lot of other things to solve first.

Anonymous said...


you're doing great work and you're listening to the users, we love you man :)

riessmi said...

tooltips is what i wanted to say with "hover".
i mean Interface, if i write IF, in this case espacially: wlan0
i think the user really wants to know the IF, cause some have, as i have, more than one WiFi-IF
so it is diffcult to see to what IF the connection is up.
Newer mobiles/netbook will have WiFi over 802.11 and LTE and GSM via USB-Stick, Bluetooth...
so it is very difficult to see what happens if ou cannot se the IF(System Name).
Just think about it, perhaps my idea is not usefull for the rest of us.