问题标签 [terminal-emulator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JSF 应用程序中的交互式终端仿真
我们正在开发由 JSF(Primefaces)/Spring/Hibernate 支持的(基本上是数据挖掘)Web 应用程序。对于下一步,我们必须创建某种终端仿真,以便 Web 应用程序可以通过 SSH 用户访问请求的主机。
这个问题的目的是找出适合我们要求的技术。目前我正在用 java applet 和 jnlp 做概念证明,但对它们的理解不够深入,无法提前看到它们的局限性/可能性。
用例:(从项目规范简化):
假设我们在 java applet 中进行仿真。想象一下带有 p:selectOne 菜单 ( hostMenu )、p:dataTable ( scriptTable ) 和我们的小程序的简单网页。HostMenu 项目由包含服务器 URL、登录名和密码的对象支持。将数据复制到小程序并建立 SSH 连接的选择更改触发事件。
现在在 scriptTable 中,将有用户定义的简单、预定义的脚本。将脚本视为非常简单的东西(例如ls -l在 linux 机器上)。表上的双击事件将在小程序的 ssh 会话中执行脚本。
其他一些要求和合同限制
- ssh 连接必须在客户端计算机上完成(而不是在服务器上)
- 仿真必须是完全交互式的(特别是在 linux 机器上,TAB 键自动完成)
- 在网页上,AJAX 请求不会重置小程序(它在请求之前保持与机器的连接)
任何回应都值得赞赏。除了applet/jnlp 之外的其他技术也是如此。例如,如果您知道从 JSF 与外部模拟器(Putty、linux 控制台)交互的可能性,我们可以使用它们。
java - Java 终端模拟器
有谁知道模拟 vt100 终端的库或类(图形与否无关紧要)。我想要的基本上是一个实现 vt100 终端逻辑的类(比如当接收到“删除”代码时将调用删除函数,或者如果基于 GUI 将删除一个字符)。
emacs - 在 emacs 中无法在终端模式下工作的块绑定?
一些在 GUI 模式下工作的 emacs 键盘绑定在终端模式下不起作用,因为终端只知道如何发送 ASCII 控制代码。当我将键绑定到非 ASCII 控制代码时,有没有办法让 emacs 抱怨,所以我会意外停止这样做?我只是偶尔在终端上运行 emacs,而且通常只是远程运行,而且通常只是因为某些东西坏了,这意味着我最终会在最糟糕的时候发现这种糟糕的情况。
我也有过远程处理的经验,尤其是从一个操作系统到另一个操作系统(例如 Solaris -> Linux),其中甚至修改键都被重新映射(esc <-> ctrl 被交换,或者右 alt 有效但左 alt 无效)。有什么方法可以检测到这种情况何时发生并适当地交换我的键盘绑定?
基本上:每次我在终端远程使用 emacs 时,我都会得到与 GUI 不一致的体验,这很糟糕,我该如何更改我的 emacs 使用以防止这种情况发生。
macos - 终端仿真器如何知道附加了哪些进程?
OS X Terminal.app 有一个显示“活动进程名称”的选项。它以合理的准确度显示终端内(其中一个)前台进程的名称。例如,在运行时make
,它会显示构建过程中涉及的各个子进程的名称(cc
、collect
、ld
等)。这究竟是如何工作的?
到目前为止,我的主要假设是它跟踪附加会话中的前台进程组,并选择该进程组中最近启动的进程。但是,我不清楚它使用什么系统调用或服务来实现这一点。
emacs - 终端的 Emacs 输入解码映射
我问了一个关于终端 Emacs 中的 Ctrl-箭头键绑定的问题:
并且被告知,Linux 终端仿真器不处理这种组合。我设法为loadkeys
命令创建了一个文件,该文件处理这些键:
然后从根加载它:
之后,每次我在控制台中单击 Ctrl-right 或 Ctrl-left 时,都会打印出“right”或“left”。现在我需要在 Emacs 中处理它。据我从这个问题了解到:
在 Emacs 23.1.1 中绑定 M-<up> / M-<down>
必须使用input-decode-map
函数来完成。但我无法让它工作。请帮忙。
ssh - 通过 SSH 访问特定的终端模拟器
背景:我每天都使用一个 linux 机器(称之为主机)。但有时,GUI/鼠标/键盘停止工作并且它(主机)挂起。除了重新启动它(主机)之外,我什么也做不了。所以,现在我总是在它(主机)上运行一个 ssh 服务器,这样我就可以连接到它并安全地关闭它。我通过在我的笔记本电脑上使用 VNC 客户端(称之为 REMOTE)来做到这一点。它从主机复制整个屏幕,所以即使我在主机上的鼠标/键盘不起作用,我也可以用 REMOTE 关闭东西。但是 VNC 的网络使用成本高且速度慢。我想用普通的 ssh 连接替换它。
问题重新定义:所以,如果我启动一个简单的程序在“主机”上的终端上无休止地打印“hello world”。我如何通过 SSH 在“REMOTE”上看到相同的终端(带有 hello world 打印)。不只是看,控制这个程序说停止它,杀死它等等。
android - 'touch' 工作和'mkdir' 会失败吗?
在目录中是否存在可以工作但会失败的情况。touch
mkdir
我知道这两个调用都涉及写入inode
父目录。因此,如果 touch 有效,它不是自动意味着 inode 是可写的,因此mkdir
不可能失败。
这是Android(我只听说过一个报告,实际上并没有看到这种情况)并且命令是从终端模拟器运行的,在/system
目录中(在请求之后su
),但这不应该对IMO产生影响。
编辑:mkdir 失败了"permission denied"
gtk - 无法使用键盘在 VTE 中选择文本
我正在使用 VTE 库用 C 语言编写自己的终端应用程序。一切都很好,除了我不能用键盘选择文本。例如,如果我刚刚输入了一些内容,在大多数终端中,您可以按住 shift 键并使用左箭头键选择上一个文本,然后您可以将其粘贴到您想要的任何位置。在 VTE 中,所发生的只是您在当前光标位置获得一个 D。我显然可以通过从按键返回 TRUE(我已经完成)来阻止终端中 D 的打印,但我仍然无法选择文本。
我以为我可以从 开始手动执行此操作vte_terminal_get_cursor_position()
,但是一旦我有了选择的边界,就没有方法可以在 VTE 中选择一个文本块(我可以找到)。
我查看了其他基于 VTE 的项目,例如 tinyterm 和 evilvte,但是当按下该组合键时,它们也只会在终端中打印 D。
那么有没有办法使用键盘在 VTE 中选择文本呢?谢谢。
更正: 事实证明,很少有终端允许您使用键盘选择文本。不知道那是怎么进入我的脑海的。无论如何,我仍然认为这将是一个方便的功能,所以问题是存在的。任何想法将不胜感激。
x11 - X Server 从 Windows 到 Windows - 这可能吗?
我想知道是否可以在 Windows 上运行 X Server(例如 mobaxterm、xming 等)来显示在远程 Windows 机器上运行的应用程序。
我知道如果它在远程 Linux 机器上运行是可能的,但仍然想知道在 windows-windows 环境中这是否可能。
我需要在本地 Windows 机器上打开 Windows 远程应用程序。我知道我可以使用 VNC / radmin / RDP 但问题是这些解决方案给了所有远程机器。我必须在本地 Windows 上只显示特定的应用程序,就像我打开 xclock 一样。
请指教...谢谢
android - Android - 在流中去除额外的\r\n?
更新的问题:我正在尝试使用 android 中的库连接到终端仿真器,这将连接到串行设备,并且应该向我显示发送/接收的数据。在这两种情况下,我应该能够通过终端下方的文本框或通过输入终端本身并在键盘上按 Enter 来通过连接发送数据。
当我通过文本框发送数据\n
时,当我按下回车键时,我必须附加到数据以进入新行,如下所示:
和写方法:
}
当我在终端会话本身键入后按回车键时,根本没有出现新行。所以我不得不测试数据\r
并将其替换为\r\n
:
所以效果很好,现在当我输入终端会话本身并按回车时,我得到了我想要的换行符。但是,现在每次我从文本框中发送数据时,\n
每个换行符之间都会有一个额外的空格以及获得额外的换行符。
所以我认为在计算回车数时,请先查看下一个字节,如果'\n'
不计算:
这解决了空格的问题......但这很愚蠢,因为我现在回到原来的问题,如果我直接在终端中输入没有新行,因为它看到\r\n
并看到下一个字节是无效的。让两者一起工作的最佳方式是什么?我要么有这些奇怪的额外空格,所有输入都很好,要么是正常间距,我不能直接从终端输入文本,只能输入文本框。我认为它真的很容易修复,我只是在挠头看着它。