lazarus开发Linux程序运行在非登录用户下无法输入中文。

发布时间 2023-12-19 20:01:49作者: 禁卫军

比如登录系统用的是Myname这个用户。而后又用su进入root用户后,如果没有退出root就运行所开发的程序,可能中文输入法无法调用。

可以写以下程序判断是否登录用户与当前运行用户是否一致。

type
ptpasswd = ^tpasswd;
cint=LongInt;
tpasswd = record
pw_name: PChar;
pw_passwd: PChar;
pw_uid: cint;
pw_gid: cint;
pw_gecos: PChar;
pw_dir: PChar;
pw_shell: PChar;
end;
function getlogin: PChar; cdecl; external 'c' name 'getlogin'; //当前登录在系统上的登录用户名
function getpwnam(name:PChar):ptpasswd;cdecl;external 'c' name 'getpwnam'; //根据用户名得到信息
function getuid: cint; cdecl; external 'c' name 'getuid'; //得到进行调用的用户ID
function getpwuid(uid: cint): ptpasswd; cdecl; external 'c' name 'getpwuid'; //根据用户ID得到信息

implementation

function RunAtSelf():Boolean;
begin
if getpwnam(getlogin)^.pw_uid=getuid then
begin
Result:=True;
end else
begin
Result:=False;
end;
end;

调用

if not RunAtSelf() then
begin
Application.MessageBox('程序运行的用户不是系统登录用户' +
#10 + '可能无法调用中文输入法!','中文输入可能无法使用',MB_OK or MB_ICONWARNING);
end;