gksudo is a GTK-based frontend of sudo(BTW, kdesudo is a Qt-based frontend), however it (by default) handles more environmental variables(HOME, XAUTHORITY, etc.) than sudo thus making running commands as root safer.
As far as I can see only @Logics answer is correct enough (@Ignacio Vazquez-Abrams's is not complete). Here is the try-to-avoid clarification to @Davros @knitti answer/comments (Please kindly remove/edit them when it's not needed):
- Although both commands are indeed represents
sudo, the UI used is NOT the only difference of the two commands.
- Running GUI program is NOT the only situation when you should use gk/kdesudo, instead you should use gk/kdesudo whenever you can't determine whether the command will create/write files to your home directory (which the
HOME environment variable points to in the sudo command in some system and situations). Not all GUI apps writes to your home directory and not all CLI apps don't, so the type of command isn't the key point.
- You still can use
sudo command to launch GUI apps as root (for viewing apps' console output as an example), however you need to handle HOME (and others such as XAUTHORITY, DISPLAY, input-method-related-stuff, etc.) environmental variables correctly so that the launched app won't fail, lose functionality or do really-bad stuff. The following is my current recommendation for using sudo
sudo -H <rest of the command>
- (from
sudo section 8 manual page) The -H ( HOME ) option requests that the security policy set the HOME environment variable to the home directory of the target user (root by default) as specified by the password database. Depending on the policy, this may be the default behavior.
- This should at least prevent files being created in
sudo caller's home directory
sudo -H DISPLAY=<a working X display name, usually :0> <rest of a GUI program command>
- This should let <GUI program> executed in a TTY terminal and displayed in your desktop environment
- The behavior of the
sudo command is not identical on all the systems and can be configured through visudo command, please check out sudoers(5) manpage for more info.