procedure TForm1.runApp(anApp: string; asRoot: boolean);
var
AProcess: TProcess;
I: integer;
DisplayVar: string;
begin
AProcess := TProcess.Create(nil);
try
AProcess.InheritHandles := False;
AProcess.Options := [poNoConsole, poWaitOnExit];
AProcess.ShowWindow := swoShow;
DisplayVar := GetEnvironmentVariable('DISPLAY');
if DisplayVar = '' then
DisplayVar := ':0';
AProcess.Environment.Add('DISPLAY=' + DisplayVar);
for I := 1 to GetEnvironmentVariableCount do
AProcess.Environment.Add(GetEnvironmentString(I));
if asRoot then
begin
AProcess.Executable := '/bin/bash';
AProcess.Parameters.Add('-c');
AProcess.Parameters.Add('sudo setsid ' + anApp + ' &');
end
else
begin
AProcess.Executable := '/bin/bash';
AProcess.Parameters.Add('-c');
AProcess.Parameters.Add('setsid ' + anApp + ' &');
end;
AProcess.Execute;
finally
AProcess.Free;
end;
end;