我gpg-agent用于管理 PGP e SSH 身份。代理以这样的脚本启动
gpg_agent_env="$XDG_CACHE_HOME/gpg-agent.env"
export GPG_TTY="$(tty)"
if ! ps -U "$USER" -o ucomm | grep -q gpg-agent; then
eval "$({gpg-agent --daemon | tee $gpg_agent_env} 2> /dev/null)"
else
source "$gpg_agent_env" 2> /dev/null
fi
Run Code Online (Sandbox Code Playgroud)
每当我运行交互式 shell 时,它就会被获取。使用此设置一切正常,但存在问题。假设我:
此时gpg-agent将开始pinentry-curses提示密码,但它会在第一个终端中执行此操作,导致其输出与正在运行的任何内容(通常是文本编辑器)混合,无法恢复程序或停止输入(它开始使用 100% cpu我必须杀死它)。
我一定在这里做错了什么。任何人都经历过这种情况?
我发现这种情况只发生在提示解锁 SSH 密钥时,看起来像这样,而 PGP 密钥的提示总是在正确的(即当前的)tty 上打开。
据我了解,对于与 Linux 内核的基于文本的交互,一个名为init开始getty(或agetty)的程序连接到下面的一个 TTY 设备/dev并提示输入用户名。此后,login运行一个调用的程序,提示输入用户的密码,如果正确,则启动用户首选的外壳程序(例如bash或csh)。此时,bash 通过 TTY 设备与内核交互。
这个登录过程如何在 X11 上工作?X11 是否通过 TTY 与内核交互?
需要明确的是,我指的不是/etc/issue(在提示前显示)或/etc/motd(在登录后显示),而是提示本身,即当前
hostname login:
Run Code Online (Sandbox Code Playgroud)
总的来说,我正在运行 Arch Linux,但我相信答案很可能是跨发行版。
我想调整,当你按下它出现的终端CtrlAltF1(或F2,F3...)。25x80 对于 24" 屏幕来说很小。
尝试使用stty,但命令stty columns 200并stty rows 50不能直接工作。我是不是遗漏了什么,或者这是一种错误的方法。
理想情况下寻找一个通用的解决方案,但会满足于在 RHEL5 和 Ubuntu 中工作的东西。如果可以使用一些我可以放在脚本文件中的命令而不是更改一些引导级别的东西,那就更好了。
我正在运行 Ubuntu 15.04 64 位桌面版(基于 Debian 的 Linux)。
我使用sudo dpkg-reconfigure console-setup命令行将默认控制台字体类型更改为 Terminus。紧接着,控制台字体变为看起来更清晰的字体。
然而,在重新启动后Ctrl+ Alt+F1带我到具有原始大块寻找风格字体的脸,不是我选择的选择一个控制台窗口。
该/etc/default/console-setup文件似乎已更改为我的选择。
# CONFIGURATION FILE FOR SETUPCON
# Consult the console-setup(5) manual page.
ACTIVE_CONSOLES="/dev/tty[1-6]"
CHARMAP="UTF-8"
CODESET="guess"
FONTFACE="Terminus"
FONTSIZE="8x16"
VIDEOMODE=
# The following is an example how to use a braille font
# FONT='lat9w-08.psf.gz brl-8x8.psf'
Run Code Online (Sandbox Code Playgroud)
如何永久更改控制台字体以使用我喜欢的字体?
系统信息:
macOS Sierra 10.12.6
zsh 5.4.2 (x86_64-apple-darwin16.7.0)
GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin16.3.0)
Run Code Online (Sandbox Code Playgroud)
滚动到示例在底部,如果你只是想挖成简单的例子,我做。
注意:我不是一个大zsh用户。
注意它们是如何运行可变命令的$(__fzfcmd)。__fzfcmd默认情况下输出fzf到 stdout 并且参数替换仅运行fzf由输出产生的命令 ( )。
bash和zsh脚本之间的一个区别是,bash它进一步通过管道传输 的输出,$(__fzfcmd)但zsh只是将其捕获在数组中。我的猜测是因为zsh当您进一步将fzf无法输入的输出fzf通过管道传输到并且通过管道传输到的进程fzf没有获得任何标准输入时出现问题。您唯一的选择是^Z或^C。^C似乎出于某种原因使该过程成为背景。或者也许他们只是想将它放在一个数组中,以便他们可以在它上面运行zle vi-fetch-history。该bash版本在键绑定中做了一些魔法"\e^": history-expand-line
现在fzf不重要。似乎您只需要一个程序来输出tty到要通过参数替换调用的 来导致此问题。所以我将展示一些更简单的例子。
以下是输出到tty …
我读了一个声称正在运行的用户的答案
foo 2>&1 >& output.log &
Run Code Online (Sandbox Code Playgroud)
foo即使他们注销,也会导致继续运行。据该用户称,这甚至可以通过 SSH 连接工作。
我并不真正相信这一点,因为我的印象是,在与 SSH 断开连接或终止 TTY 的情况下,shell 及其进程会收到 SIGHUP,导致它们终止。这一点,我的假设下,被使用的唯一理由nohup在这样的情况下,或者tmux,screen等。
然后我查看了glibc 的手册:
该信号还用于向与该会话相关联的作业报告终端上控制进程的终止;此终止有效地断开会话中的所有进程与控制终端的连接。
这似乎证实了我的想法。但进一步看,它说:
如果进程是具有控制终端的会话领导者,则向前台作业中的每个进程发送 SIGHUP 信号,并且控制终端与该会话解除关联。
那么,这是否意味着置于后台的作业将不会收到 SIGHUP?
令我更加困惑的是,我运行了一个交互式 Zsh 会话,运行yes >& /dev/null &并输入了exit,当 Zsh 警告我有正在运行的作业时,exit第二次输入后,它告诉我它已经 SIGHUPed 一个作业。在 Bash 中执行完全相同的操作会使工作继续运行……
假设,我有一个没有X server. 我只能从控制台登录。看来,默认情况下 linux 控制台仅支持 8 种颜色:
# tput colors
8
Run Code Online (Sandbox Code Playgroud)
是否可以在控制台中使用 256 种颜色,就像我在终端仿真器(即终结器)中使用的一样?
在谷歌搜索时,我发现了许多类似的问题(其中许多已经超过 10 年),但没有明确的答案。有人建议使用帧缓冲区,其他人建议将 TERM 参数附加到内核引导选项。
目前,我只传递一个额外的选项作为内核启动参数:
append="video=1280x720"
Run Code Online (Sandbox Code Playgroud)
我相信传递视频分辨率仅适用于kernel mode setting支持的现代内核,但我不确定。
是否可以在现代 linux 控制台 (tty) 中使用 256 种颜色
如何?
我正在使用内核 4.1 的 Debian Wheezy
更新:
根据@muru 的建议,我尝试了fbterm. 虽然它可以使用 256 种颜色,但它的字体非常难看/乱码。此外,左下角有一个不断闪烁的光标,我觉得这很分散注意力。
我可以在没有 fbterm/framebuffer 的情况下在控制台中使用 256 色吗?
控制台中的 8 色限制从何而来?
让我们运行cat然后输入athen ^D- 你会看到cat没有退出。
与cat+ a+ Enter+比较^D- 现在 cat 确实退出了。
那么,为什么在第一种情况下^D需要按两次退出cat,而^D在第二种情况下只需要按一次?
在非图形控制台 (<Ctrl><Alt><F...>) 和 X 会话之间复制/粘贴的最快方法是什么?
现在 :
有没有更简单的方法来做到这一点?非 X 控制台和 X 会话的主要选择是否可以合并?理想情况下,我想在控制台中选择文本,然后切换到 X 会话并粘贴它(单击鼠标中键)。这可以做到吗?