mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
Merge pull request #108 from calvinweb/call_system_terminal
FEAT:Support call system terminal(Macos&Linux)
This commit is contained in:
@@ -225,6 +225,7 @@ class _ServerPageState extends State<ServerPage>
|
|||||||
_buildTopRightText(ss, cs),
|
_buildTopRightText(ss, cs),
|
||||||
width13,
|
width13,
|
||||||
_buildSSHBtn(spi),
|
_buildSSHBtn(spi),
|
||||||
|
// SizedBox(width: 5,),
|
||||||
_buildMoreBtn(spi),
|
_buildMoreBtn(spi),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@@ -270,12 +271,12 @@ class _ServerPageState extends State<ServerPage>
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildSSHBtn(ServerPrivateInfo spi) {
|
Widget _buildSSHBtn(ServerPrivateInfo spi) {
|
||||||
return GestureDetector(
|
return IconButton(
|
||||||
child: const Icon(
|
icon: const Icon(
|
||||||
Icons.terminal,
|
Icons.terminal,
|
||||||
size: 21,
|
size: 21,
|
||||||
),
|
),
|
||||||
onTap: () => AppRoute(SSHPage(spi: spi), 'ssh page').go(context),
|
onPressed: () => startSSH(spi, context),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'dart:io' show Process, File;
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
@@ -25,6 +26,33 @@ import '../../../data/store/setting.dart';
|
|||||||
import '../../../locator.dart';
|
import '../../../locator.dart';
|
||||||
import '../storage/sftp.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 {
|
class SSHPage extends StatefulWidget {
|
||||||
final ServerPrivateInfo spi;
|
final ServerPrivateInfo spi;
|
||||||
final String? initCmd;
|
final String? initCmd;
|
||||||
|
|||||||
Reference in New Issue
Block a user