/dev/vcs[a]<n>
यदि आपने स्क्रॉल किया है, तब भी आपको केवल अंतिम स्क्रीन-पूर्ण मिलेगा, लेकिन आपके ioctl()
द्वारा उपयोग gpm
किए जाने पर भी आप वर्तमान में प्रदर्शित स्क्रीन को डंप करने की अनुमति देंगे।
तो आप कर सकते हैं:
sleep 3; perl -e '
require "sys/ioctl.ph";
# copy:
ioctl(STDIN, &TIOCLINUX, $arg = pack("CS5", 2, 1, 1, 80, 25, 2));
# paste:
ioctl(STDIN, &TIOCLINUX, $arg = "\3")'; cat > file
80 और 25 को अपनी वास्तविक स्क्रीन चौड़ाई और ऊंचाई पर समायोजित करें।
sleep 3
आप (के साथ स्क्रॉल करने के लिए समय देता है Shift+PageUP) वास्तविक स्क्रीन आप डंप करना चाहते हैं। cat > file
पेस्ट को पुनर्निर्देशित करता है file
। इसके साथ समाप्त करें Ctrl+D।
console_ioctl(4)
विवरण के लिए देखें।
यदि आपने gpm
स्थापित किया है और चल रहा है, तो आप उस चयन को माउस से कर सकते हैं।
लिनक्स वर्चुअल कंसोल स्क्रॉलबैक और चयन बहुत सीमित और काफी कष्टप्रद है (इसमें जब आप कंसोल स्विच करते हैं, तो आप पूरे स्क्रॉलबैक को खो देते हैं)। आगे बढ़ते हुए, मेरा सुझाव है कि आप GNU जैसी चीजों का उपयोग करें screen
या इसके tmux
भीतर (मैं व्यक्तिगत रूप से उन्हें और भी अधिक सक्षम टर्मिनलों में उपयोग करता हूं)। उनके साथ, आपके पास बड़ी खोज योग्य स्क्रॉलबैक हो सकती हैं और आसानी से उन्हें फाइलों में डंप कर सकती हैं (और यहां तक कि सभी टर्मिनल आउटपुट को भी लॉग इन करें, साथ ही उन टर्मिनल मल्टीप्लेक्सर्स के साथ आने वाले अन्य सभी उपहार भी)।
पूरे स्क्रॉलबैक बफर को डंप करने के लिए प्रक्रिया को स्वचालित करने के लिए, यह कुछ शर्तों के तहत संभव होना चाहिए, लेकिन एपीआई बहुत सीमित होने के कारण काफी मुश्किल है। ioctl
वर्तमान वर्चुअल कंसोल को कुछ ऑफसेट (स्क्रॉल करने के लिए नकारात्मक, स्क्रॉल करने के लिए पॉजिटिव के लिए नकारात्मक) को स्क्रॉल करने के लिए एक अनजाने (TIOCLINUX, सबकोड = 13) है।
हालांकि, स्क्रॉलबैक बफर के वर्तमान आकार को जानने का कोई तरीका नहीं है (जो मुझे पता है)। इसलिए यह जानना कठिन है कि आप उस बफर के शीर्ष पर कब पहुंचे हैं। यदि आप इसे पिछले स्क्रॉल करने का प्रयास करते हैं, तो स्क्रीन को उतने शिफ्ट नहीं किया जाएगा और यह जानने का कोई विश्वसनीय तरीका नहीं है कि स्क्रीन ने वास्तव में कितना स्क्रॉल किया है।
मुझे स्क्रॉलिंग ioctl अनिश्चित (कम से कम वीजीए कंसोल के साथ) का व्यवहार भी मिलता है, जहां 4 से कम लाइनों द्वारा स्क्रॉल करना कभी-कभी ही काम करता है।
नीचे दी गई स्क्रिप्ट मुझे फ्रेम बफ़र कंसोल (और कभी-कभी वीजीए वालों पर) के लिए काम करती है, बशर्ते कि स्क्रॉलबैक बफर में एक स्क्रीन और एक लाइन से अधिक समान लाइनों के अनुक्रम न हों।
यह काफी धीमा है क्योंकि यह एक समय में एक लाइन को स्क्रॉल करता है, और प्रत्येक स्क्रीन डंप को पढ़ते समय ईओएफ के लिए 10ms इंतजार करना पड़ता है।
that-script > file
वर्चुअल कंसोल के भीतर से उपयोग किया जाना है।
#! /usr/bin/perl
require "sys/ioctl.ph";
($rows,$cols) = split " ", `stty size`;
$stty = `stty -g`; chomp $stty;
system(qw(stty raw -echo icrnl min 0 time 1));
sub scroll {
ioctl(STDIN, &TIOCLINUX, $arg = pack("Cx3l", 13, $_[0])) or die "scroll: $!";
}
sub grab {
ioctl(STDIN, &TIOCLINUX, $arg = pack("CS5", 2, 1, 1, $cols, $rows, 2)) or die "copy: $!";
ioctl(STDIN, &TIOCLINUX, $arg = "\3") or die "paste: $!";
return <STDIN>;
}
for ($s = 0;;$s--) {
scroll $s if $s;
@lines = grab;
if ($s) {
last if "@lines" eq "@lastlines";
unshift @output, $lines[0];
} else {
@output = @lines;
}
@lastlines = @lines;
}
print @output;
exec("stty", $stty);