v1.8.6: fix sudo detection, terminal copy/paste
- Tighten sudo auto-password to only match "[sudo] password for" in last line (fixes journalctl hang) - Remove state="disabled" from terminal widget (fixes copy/paste on Windows) - Copy: Ctrl+C (with selection), Ctrl+Shift+C, right-click menu - Paste: Ctrl+V, Ctrl+Shift+V, right-click menu Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -156,19 +156,21 @@ class TerminalTab(ctk.CTkFrame):
|
||||
pass
|
||||
if chunks:
|
||||
combined = b"".join(chunks)
|
||||
self._sudo_buffer += combined
|
||||
# Keep only last 200 bytes for pattern matching
|
||||
self._sudo_buffer = self._sudo_buffer[-200:]
|
||||
self._terminal.feed(combined)
|
||||
|
||||
if not self._sudo_sent:
|
||||
buf_str = self._sudo_buffer.decode("utf-8", errors="replace").lower()
|
||||
if "[sudo] password for" in buf_str or buf_str.rstrip().endswith("password:"):
|
||||
# Sudo auto-password: only check if not already sent
|
||||
if not self._sudo_sent and self._session:
|
||||
self._sudo_buffer += combined
|
||||
self._sudo_buffer = self._sudo_buffer[-300:]
|
||||
buf_str = self._sudo_buffer.decode("utf-8", errors="replace")
|
||||
# Only match actual sudo password prompt — NOT log output
|
||||
last_line = buf_str.rstrip().rsplit("\n", 1)[-1].strip()
|
||||
if "[sudo] password for" in last_line:
|
||||
server = self.store.get_server(self._current_alias)
|
||||
if server and server.get("password"):
|
||||
self._session.send(server["password"].encode() + b"\n")
|
||||
self._sudo_sent = True
|
||||
|
||||
self._terminal.feed(combined)
|
||||
self._sudo_buffer = b""
|
||||
|
||||
def _on_disconnected(self):
|
||||
"""Called from SSH read thread."""
|
||||
|
||||
Reference in New Issue
Block a user