Вы нашли команду сами, просто необходимо проанализировать ее. Например:
$ xrandr -q | grep -Po 'current\s*\d+\s*x\s*\d+' | awk '{print $1/$3}'
Регулярное выражение ищет current
, затем 0 или больше пробельных символов (\s*
), затем одна или несколько цифр (\d+
) сопровождаемый \s*
, затем x
, затем \s*
и наконец больше цифр. \K
просто отбрасывания что-либо, что было подобрано до той точки:
$ xrandr -q | grep -Po 'current\s*\K\d+\s*x\s*\d+'
1680 x 1050
Так, Вы передаете это gawk
который разделит на поля на пробеле и распечатает результат второго поля, разделенного на четвертое.
Лучший путь состоит в том, чтобы получить список от Википедии и просто вставить его в текстовый файл (удостоверьтесь, что вкладки между полями копируются правильно):
$ cat resolutions.txt
VGA 4:3 640 480 00.02 n/a
SVGA 4:3 800 600 00.17 01.03
WSVGA ~17:10 1024 600 00.31 02.25
XGA 4:3 1024 768 05.53 18.69
XGA+ 4:3 1152 864 00.87 01.55
WXGA 16:9 1280 720 01.51 01.54
WXGA 5:3 1280 768 n/a 01.54
WXGA 16:10 1280 800 04.25 12.97
SXGA– (UVGA) 4:3 1280 960 00.72 00.72
SXGA 5:4 1280 1024 10.66 07.49
HD ~16:9 1360 768 02.36 02.28
HD ~16:9 1366 768 17.19 19.14
SXGA+ 4:3 1400 1050 00.18 n/a
WXGA+ 16:10 1440 900 07.60 06.61
HD+ 16:9 1600 900 06.82 03.82
UXGA 4:3 1600 1200 00.53 n/a
WSXGA+ 16:10 1680 1050 10.26 03.66
FHD 16:9 1920 1080 25.04 05.09
WUXGA 16:10 1920 1200 03.65 01.11
QWXGA 16:9 2048 1152 00.13 n/a
WQHD 16:9 2560 1440 00.72 00.36
WQXGA 16:10 2560 1600 00.19 n/a
3:4 768 1024 n/a 01.93
16:9 1093 614 n/a 00.63
~16:9 1311 737 n/a 00.35
Other 01.29 07.25
Теперь, используйте тот файл для получения значения, в котором Вы нуждаетесь:
$ grep -Po 'current\s*\K\d+\s*x\s*\d+' a | sed 's/ *x */ /' |
while read x y; do
grep "$x" resolutions.txt | grep "$y" | awk -F"\t" '{print $2}';
done
16:10
Наконец, превратите это в небольшой сценарий:
#!/usr/bin/env bash
## The location of the file with the resolutions
RESOLUTIONS="$HOME/resolutions.txt"
xrandr -q | grep -Po 'current\s*\K\d+\s*x\s*\d+' | sed 's/ *x */ /' |
while read x y; do
grep "$x" "$RESOLUTIONS" | grep "$y" | awk -F"\t" '{print $2}';
done
Сохраните сценарий где-нибудь в Вашем $PATH и затем выполните его для получения разрешения:
$ get_resolution.sh
16:10
Последние расстройства по этому вопросу:
Не совсем настоящий ответ, но он может помочь кому-либо лицом к той же проблемы. Вот код Python для минимального прокси, сопоставляющего весь файл, полученный в оборудованном режиме, и отдавая его обратно с заголовками длины содержимого:
# -*- coding: latin1 -*-
import urllib.request
import http.server
import logging
class Handler(http.server.BaseHTTPRequestHandler):
HEADERS = [ 'If-Modified-Since', 'Host', 'User-Agent', 'Accept',
'Connection' ]
def do_GET(self):
logging.debug("Got a request %s", self.path)
if self.server.debug >= 3:
logging.debug("Original headers %s", self.headers.as_string())
req = urllib.request.Request(self.path)
for (key, value) in self.headers.items():
if key in __class__.HEADERS:
req.add_header(key, value)
if self.server.debug >= 4:
logging.debug("Send headers %s", str(req.headers))
r = self.server.opener.open(req)
code = r.getcode()
logging.debug('Code %d', code)
if self.server.debug >= 3:
logging.debug("Received headers %s", str(r.headers))
if code == 200 and self.server.chunk:
self.send_response(code)
self.send_header('Transfer-Encoding', 'chunked')
self.end_headers()
while True:
t = r.read(4095)
logging.debug('Chunk : %d', len(t))
self.wfile.write(("%03x\r\n" % (len(t),)).encode())
if len(t) == 0:
self.wfile.write(b"\r\n")
break
else:
self.wfile.write(t)
self.wfile.write(b"\r\n")
else:
t = r.readall()
#print(t)
self.send_response(code)
logging.debug('Content-Length %d', len(t))
self.send_header('Content-Length', len(t))
self.end_headers()
self.wfile.write(t)
class MiniProxy(http.server.HTTPServer):
def __init__(self, port=8080, relay=None, chunk=False, debug=0):
http.server.HTTPServer.__init__(self, ('', port), Handler)
self.port = port
self.relay = relay
self.chunk = chunk
self.debug= debug
if relay is not None:
logging.info("relay set to", relay)
self.proxyHandler = urllib.request.ProxyHandler(
{'http': relay})
self.opener = urllib.request.build_opener(self.proxyHandler)
else:
self.opener = urllib.request.build_opener()
if __name__ == '__main__':
import sys
import argparse
parser = argparse.ArgumentParser(description =
"Simple HTTP proxy to chunk or unchunk responses")
parser.add_argument('-c', '--chunk', dest = 'chunk', action='store_true')
parser.add_argument('-C', '--no-chunk', dest = 'chunk', action='store_false')
parser.add_argument('-r', '--relay')
parser.add_argument('-p', '--port', type=int, default = 8080)
parser.add_argument('-d', '--debug', type=int, default = 0)
params = parser.parse_args()
proxy = MiniProxy(port = params.port, relay = params.relay,
chunk = params.chunk, debug = params.debug)
logging_format = '%(levelname)s:%(message)s'
if params.debug == 1:
logging.basicConfig(format=logging_format, level=logging.INFO)
elif params.debug >= 2:
logging.basicConfig(format=logging_format, level=logging.DEBUG)
else:
logging.basicConfig(format=logging_format)
try:
print (sys.argv[0], "listen on", proxy.port)
proxy.serve_forever()
except KeyboardInterrupt:
print('Stop')
#proxy.shutdown()