Как направить сегмент вывода Heredoc в локальный файл

Вероятно, это вина игры, а не утилиты создания снимков экрана. X11 отправляет приложениям событие VisibilityNotify , чтобы сообщить им, что их окно полностью видно, частично или полностью закрыто. Когда окно полностью закрыто, большинство приложений не заботятся об обновлении своего дисплея, что экономит ресурсы. Другими словами, если никто не видит его, дерево не падает.

Я думаю, что если вы отправите игровому окну событие VisibilityNotify, чтобы сделать вид, что оно видно, то вы получите снимок экрана. Вам нужно будет отправить событие после того, как окно станет закрытым, поскольку X11 сам отправит свое обычное событие в это время. Вот непроверенный сценарий, который отправляет событие VisibilityNotify, вызовите его с аргументом VisibilityParhibitedObscured или VisibilityUnobscured . Я следую за событием MapNotify , я не знаю, полезно ли оно. Вам нужны Python и Python-xlib.

#! /usr/bin/env python
import re, sys, time
import Xlib.X, Xlib.XK, Xlib.display, Xlib.protocol

def parse_action(string):
    state = {
              '0': 0,
              '1': 1,
              '2': 2,
              'unobscured': 0,
              'partiallyobscured': 1,
              'fullyobscured': 2,
              'visibilityunobscured': 0,
              'visibilitypartiallyobscured': 1,
              'visibilityfullyobscured': 2,
             }[string.lower()]
    return state

def parse_window(display, arg):
    wid = int(arg, 0)
    return display.create_resource_object('window', wid)

def send_event(display, window, state):
    window.send_event(Xlib.protocol.event.VisibilityNotify(window=window,
                                                           state=state))
    window.send_event(Xlib.protocol.event.MapNotify(window=window,
                                                    event=window,
                                                    override=False))
    display.sync()

if __name__ == "__main__":
    display = Xlib.display.Display()
    send_event(display, parse_window(display, sys.argv[1]), parse_action(sys.argv[2]))

0
01.02.2019, 22:43
1 ответ

Вы можете убрать первую строку перед перенаправлением в ваш файл:

sshpass... "$remote-port" | sed 1d << EOF > /home/drew/Desktop/Example_Capture.pcap
sh
tcpdump -i eth5.1 -s 0 -n -v not host $local-ip -w -
EOF
0
28.01.2020, 04:03

Теги

Похожие вопросы