diff --git a/lib/view/page/server/tab.dart b/lib/view/page/server/tab.dart index 5988a745..d84c0f5d 100644 --- a/lib/view/page/server/tab.dart +++ b/lib/view/page/server/tab.dart @@ -225,6 +225,7 @@ class _ServerPageState extends State _buildTopRightText(ss, cs), width13, _buildSSHBtn(spi), +// SizedBox(width: 5,), _buildMoreBtn(spi), ], ) @@ -270,12 +271,12 @@ class _ServerPageState extends State } 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), ); } diff --git a/lib/view/page/ssh/term.dart b/lib/view/page/ssh/term.dart index 88d13393..947c8c7c 100644 --- a/lib/view/page/ssh/term.dart +++ b/lib/view/page/ssh/term.dart @@ -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 extarArgs = []; + if (spi.pubKeyId != null) { + String path = "/tmp/.serverbox_pk_${spi.pubKeyId}"; + File(path).openWrite().write(getPrivateKey(spi.pubKeyId!)); + extarArgs += ["-i", path]; + } + List 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;