Lazarus - uruchamianie aplikacji konsolowej w Linuksie

0

Witam,

działam na xUbuntu i mam Lazarusa 2.0.12. Próbuję uruchomić program zewnętrzny napisany w języku Fortran i skompilowany na tym samym komputerze (plik wykonywalny ma nazwę drgania.out). Procedura wygląda następująco:

procedure TFG.KlawiszUruchomClick(Sender: TObject);
var
  RunProgram : TProcess;
begin
  try
  SetCurrentDir(Katalog);
  {$IFDEF Windows}
  RunProgram := TProcess.Create(nil);
  RunProgram.Executable := 'drgania.exe';
  RunProgram.Parameters.Add('');
  RunProgram.Execute;
  {$ENDIF Windows}
  {$IFDEF Unix}
  RunProgram := TProcess.Create(nil);
//  RunProgram.Executable := './drgania.out';
  RunProgram.CommandLine := 'drgania.out';
  RunProgram.Options:=RunProgram.Options+[poWaitOnExit];
  RunProgram.Execute;
  {$ENDIF Unix}
  finally
  RunProgram.Free;
  end;
end; 

Pod Windowsem wszystko działa jak należy. W Linuksie próbowałem następujące warianty (z pełną ścieżką lub bez):

RunProgram.Executable := './drgania.out';
RunProgram.CommandLine := './drgania.out';
RunProgram.Executable := 'drgania.out';
RunProgram.CommandLine := 'drgania.out';

Sprawdziłem, że aplikacje okienkowe, np. ParaView, się uruchamiają.

Dodam, że kiedyś nie miałem problemów z tym zadaniem - pojawiły się po którejś aktualizacji Lazarusa (chyba).

Dodam, że przeglądałem już różne strony (np. na stronie https://wiki.freepascal.org/Executing_External_Programs jest przykład jak uruchomić kompilator ppc386) i próbowałem wielu opcji, ale nic to nie dało. Po naciśnięciu klawisza uruchamiającego program nie dostaję żadnych komunikatów błędu - po prostu nic się nie dzieje.

Próbowałem również dodać informacje o shellu (mam basha), ale nie udało mi się rozwiązać problemu.

Będę wdzięczny za pomoc. Program - a konkretnie nakładkę na aplikację konsolową - pokazuję Studentom na zajęciach z programowania. W tym roku również chciałem to zrobić, ale moje stare przykłady nie działają.

Pozdrawiam z Olsztyna,

Wojciech Sobieski.

0

Czy ten program jest aplikacją konsolową?

Jeśli tak, to strzelam, że zamiast odpalać tę aplikację bezpośrednio powinieneś uruchamiać emulator terminala - np. jeśli korzystasz z Alacritty, to:

RunProgram.Executable := 'alacritty';
RunProgram.CommandLine := './drgania.out';

AFAIR Windows odpala emulator terminala automatycznie, ale większość distro linuksowych nie.

0

Dzięki za odpowiedź.

Tak, drgania.out to aplikacja konsolowa.

Przy próbie instalacji alacrity dostaję komunikat:

Pakiet alacritty nie ma dostępnej wersji, ale odnosi się do niego inny pakiet.
Zazwyczaj oznacza to, że pakietu brakuje, został zastąpiony przez inny
pakiet lub nie jest dostępny przy pomocy obecnie ustawionych źródeł.
Jednak następujące pakiety go zastępują:

ncurses-term

Zainstalowałem ncurses-term, ale np. coś takiego nie działa (może coś jeszcze trzeba skonfigurować?):

RunProgram.Executable := 'ncurses-term';
RunProgram.CommandLine := './drgania.out';

Do czego właściwie służą te dwie instrukcje powyżej? Myślałem, że Executable to właśnie nazwa programu, który chcemy uruchomić.

Mam inny program sprzed kilku lat i tam działała taka wersja (kompilując program obecnie nie działa):

RunProgram.Executable:='/home/wojciech/Pulpit/HookGUI/hook.out';

Pamiętam, że kiedyś działało coś takiego (nie jestem pewien czy dobrze pamiętam, ale była tam nazwa terminala i polecenie do wykonania):

RunProgram.Executable:='/bin/bash/ hook.out';

Na razie stan jest taki, że nie wiedziałem i nadal nie wiem.

Pozdrawiam z Olsztyna,

Wojciech Sobieski.

1

Przy próbie instalacji alacrity dostaję komunikat:

ubuntu alacritty w Google odpowiada, że do instalacji potrzebne jest odrębne PPA (https://ubuntuhandbook.org/index.php/2020/12/install-alacritty-ppa-ubuntu-20-04/) - ale to nie ma znaczenia, bo Alacritty podałem jedynie jako przykład :-)

W Ubuntu domyślnym emulatorem terminala najwyraźniej jest gnome-terminal, więc bez instalacji niczego dodatkowego coś takiego powinno zadziałać:

RunProgram.Executable := 'gnome-terminal';
RunProgram.Parameters.Add('-x'); // -x to komenda gnome-terminal, która określa program do uruchomienia
RunProgram.Parameters.Add('./drgania.out');
0

W końcu poszło coś takiego (przy czym w xUbuntu terminal domyślny to xfce4-terminal):

  RunProgram.Executable := 'xfce4-terminal';
  RunProgram.Parameters.Add('-x');
  RunProgram.Parameters.Add('./drgania.out');  

Sprawa rozwiązana - jak już to widzę, to wszystko mi się zgadza. Bardzo Ci dziękuję za pomoc.

Pozdrawiam z Olsztyna,

Wojciech Sobieski.

1 użytkowników online, w tym zalogowanych: 0, gości: 1