最近在南京给客户配置系统,客户要求用普通用户身份登录KDE,没有管理员权限,但是希望用sudo启动kate编辑器,并且不输入密码,经查找验证,现将已实现步骤记录如下:

     在/home/username/.kde/share/config目录下建立kdesurc文件,并编辑如下行并保存至kdesurc文件

[super-user-command]

super-user-command=sudo

    重启KDE,好了,现在用kdesu启动kate就不需要输入密码了~ 

    备注:是的,实际使用的是kdesu,这个一定要用sudo启动kate的要求是客户提出的,其实根本无法使用sudo启动kate(带有GUI的KDE程序都存在此问题),因此我只能写一个假的sudo程序,来识别kate程序,如果是kate程序,那么调用kdesu启动之,否则调用真正的sudo启动之。

     将我写的假sudo程序代码分享如下:

 
  
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string.h>  
  4.  
  5. #define KDESU "kdesu"  
  6. #define RSUDO "rsudo"  
  7. #define KATE  "kate"  
  8. #define USAGE_LINES  5  
  9. #define USAGE_LENGTH 1024  
  10.  
  11.  
  12. static char usage[USAGE_LINES][USAGE_LENGTH] =  
  13. {  
  14.     "usage: sudo -h | -K | -k | -L | -V\n",  
  15.     "usage: sudo -v [-AknS] [-g groupname|#gid] [-p prompt] [-u user name|#uid]\n",  
  16.     "usage: sudo -l[l] [-AknS] [-g groupname|#gid] [-p prompt] [-U user name] [-u \n\t     user name|#uid] [-g groupname|#gid] [command]\n",  
  17.     "usage: sudo [-AbEHknPS] [-C fd] [-g groupname|#gid] [-p prompt] [-u user \n\t     name|#uid] [-g groupname|#gid] [VAR=value] [-i|-s] [<command>]\n",  
  18.     "usage: sudo -e [-AknS] [-C fd] [-g groupname|#gid] [-p prompt] [-u user \n\t     name|#uid] file ...\n",  
  19. };  
  20.  
  21. int main(int argc, char *argv[])  
  22. {  
  23.     char cmd[1024];  
  24.     int i;  
  25.  
  26.  
  27.     if (argc < 2)  
  28.     {  
  29.         for (i = 0; i < USAGE_LINES; i++)  
  30.         {  
  31.             printf("%s", usage[i]);  
  32.         }  
  33.         return 0;  
  34.     }  
  35.     memset(cmd, '\0'sizeof(cmd));  
  36.  
  37.     if (!strcmp(argv[1], KATE))  
  38.     {  
  39.         sprintf(cmd, "%s", KDESU);  
  40.     }  
  41.     else 
  42.     {  
  43.         sprintf(cmd, "%s", RSUDO);  
  44.     }  
  45.  
  46.     for (i = 1; i < argc; i++)  
  47.     {  
  48.         strcat(cmd, " ");  
  49.         strcat(cmd, argv[i]);  
  50.     }  
  51.     printf("cmd: %s\n", cmd);  
  52.     system((const char *) cmd);  
  53.  
  54.     return 0;  
  55. }