Merge pull request #108 from calvinweb/call_system_terminal

FEAT:Support call system terminal(Macos&Linux)
This commit is contained in:
calvinweb
2023-08-07 14:31:46 +08:00
committed by GitHub
2 changed files with 32 additions and 3 deletions

View File

@@ -225,6 +225,7 @@ class _ServerPageState extends State<ServerPage>
_buildTopRightText(ss, cs),
width13,
_buildSSHBtn(spi),
// SizedBox(width: 5,),
_buildMoreBtn(spi),
],
)
@@ -270,12 +271,12 @@ class _ServerPageState extends State<ServerPage>
}
Widget _buildSSHBtn(ServerPrivateInfo spi) {
return GestureDetector(
child: const Icon(
return IconButton(
icon: const Icon(
Icons.terminal,
size: 21,
),
onTap: () => AppRoute(SSHPage(spi: spi), 'ssh page').go(context),
onPressed: () => startSSH(spi, context),
);
}

View File

@@ -1,3 +1,4 @@
import 'dart:io' show Process, File;
import 'dart:async';
import 'dart:convert';
@@ -25,6 +26,33 @@ import '../../../data/store/setting.dart';
import '../../../locator.dart';
import '../storage/sftp.dart';
startSSH(ServerPrivateInfo spi, BuildContext context) {
if (isLinux || isMacOS) {
unawaited(() async {
List<String> extarArgs = [];
if (spi.pubKeyId != null) {
String path = "/tmp/.serverbox_pk_${spi.pubKeyId}";
File(path).openWrite().write(getPrivateKey(spi.pubKeyId!));
extarArgs += ["-i", path];
}
List<String> sshCommand = ["ssh", spi.user + "@" + spi.ip] + extarArgs;
if (isLinux) {
Process.start("x-terminal-emulator", ["-e"] + sshCommand);
return;
}
if (isMacOS) {
Process.start("osascript", [
"-e",
'tell application "Terminal" to do script "${sshCommand.join(" ")}"'
]);
return;
}
}());
return;
}
AppRoute(SSHPage(spi: spi), 'ssh page').go(context);
}
class SSHPage extends StatefulWidget {
final ServerPrivateInfo spi;
final String? initCmd;