最近在南京给客户配置系统,客户要求用普通用户身份登录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程序代码分享如下:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define KDESU "kdesu"
- #define RSUDO "rsudo"
- #define KATE "kate"
- #define USAGE_LINES 5
- #define USAGE_LENGTH 1024
- static char usage[USAGE_LINES][USAGE_LENGTH] =
- {
- "usage: sudo -h | -K | -k | -L | -V\n",
- "usage: sudo -v [-AknS] [-g groupname|#gid] [-p prompt] [-u user name|#uid]\n",
- "usage: sudo -l[l] [-AknS] [-g groupname|#gid] [-p prompt] [-U user name] [-u \n\t user name|#uid] [-g groupname|#gid] [command]\n",
- "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",
- "usage: sudo -e [-AknS] [-C fd] [-g groupname|#gid] [-p prompt] [-u user \n\t name|#uid] file ...\n",
- };
- int main(int argc, char *argv[])
- {
- char cmd[1024];
- int i;
- if (argc < 2)
- {
- for (i = 0; i < USAGE_LINES; i++)
- {
- printf("%s", usage[i]);
- }
- return 0;
- }
- memset(cmd, '\0', sizeof(cmd));
- if (!strcmp(argv[1], KATE))
- {
- sprintf(cmd, "%s", KDESU);
- }
- else
- {
- sprintf(cmd, "%s", RSUDO);
- }
- for (i = 1; i < argc; i++)
- {
- strcat(cmd, " ");
- strcat(cmd, argv[i]);
- }
- printf("cmd: %s\n", cmd);
- system((const char *) cmd);
- return 0;
- }
转载于:https://blog.51cto.com/lion3875/529746