[英]“freeze” terminal output (/dev/tty1)
我正在編寫一個直接在幀緩沖區(/ dev / fb0)上運行的應用程序(用Java)。
當我啟動我的應用程序時,當前活動控制台的光標仍然閃爍,並且如果我使用向上/向下之類的鍵盤鍵,控制台將顯示最近使用的命令並覆蓋幀緩沖區的內容。
我只能阻止光標閃爍:
setterm -cursor off > /dev/tty1
有沒有一種方法可以完全凍結(然后取消凍結)控制台?
似乎X服務器做同樣的事情。 如果引導進程在GraphicsCard-1上運行,而X-Server在GraphicsCard-2上運行,則當X啟動時,GraphicsCard-1上的輸出將立即停止(光標不閃爍)。 我想如果將video-out設置為framebuffer,mplayer也會這樣做。
謝謝你的任何想法:)
嚴格來說,您觀察到的行為更多是錯誤而不是功能。 這歸因於Linux沒有正確地使用多頭。 您所看到的是X服務器將其自己的已分配虛擬終端切換到控制台的效果。 這當然-因為只有一個虛擬終端可以在一個時間全系統的活性-切換出正被顯示的虛擬終端,即使它被顯示在另一顯示適配器完全。
openvt(1)
允許您在新的虛擬終端中打開程序,而chvt(1)
允許您切換到另一個虛擬終端。
要獲得我真正想要的東西,會有些棘手:
我必須執行(從外殼程序)2命令以使終端安靜:
chvt 9
setterm -cursor > /dev/tty9
稍后可以切換回端子1:
setterm cursor > /dev/tty9
chvt 1
我選擇9號終端,但是7以上的任何數字都可以。 如果這些調用是在Java應用程序中執行的,則它們也可以工作(如JdeBP所說,只有一個虛擬終端在系統范圍內)。 僅setterm命令需要一些其他步驟來將輸出傳遞到/ dev / tty9:
Runtime.getRuntime().exec("chvt 9");
pipe("setterm -cursor off", "/dev/tty9");
private static void pipe(String cmd, String file) {
FileOutputStream fos = new FileOutputStream(file);
Process p = Runtime.getRuntime().exec(cmd);
InputStream is = p.getInputStream();
int i;
while ( (i = is.read()) != -1 ) {fos.write(i);}
p.waitFor();
fos.close();
is.close();
}
也許pipe()方法不是最佳方法,但它對我來說卻是如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.