Cách khám phá độ phân giải màn hình trong tập lệnh Linux

Tác giả sysadmin, T.Chín 23, 2023, 01:57:31 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách khám phá độ phân giải màn hình trong tập lệnh Linux


Có được hình ảnh rõ ràng hơn về màn hình mà tập lệnh của bạn đang làm việc.

  • Sử dụng lệnh xrandr để truy vấn và đặt độ phân giải màn hình và đầu ra có thể được phân tích cú pháp bằng awk để có độ phân giải hiện tại, nhưxrandr | awk -F'[ +]' '/primary/{print $4}'
  • Lệnh xdpyinfo cung cấp thông tin chi tiết về màn hình và awk có thể được sử dụng để tách dòng với độ phân giải hiện tại và với một chút thao tác nữa, bạn có thể trích xuất độ phân giải X và Y dưới dạng biến.


Nếu bạn cần biết độ phân giải màn hình hiện tại của mình trên máy tính Linux, bạn có một số lệnh để chọn. Đôi khi việc kết hợp chức năng đó vào tập lệnh Bash sẽ rất hữu ích.

1. Tại sao thay đổi độ phân giải màn hình của bạn

Đôi khi bạn cần biết độ phân giải màn hình của mình là bao nhiêu trước khi tập lệnh của bạn khởi chạy một ứng dụng hoặc thực hiện một số xử lý tiếp theo. Bạn có thể cần chuyển độ phân giải dưới dạng tham số dòng lệnh cho ứng dụng bạn sắp khởi chạy hoặc bạn có thể đã đặt lại độ phân giải và muốn kiểm tra xem việc thay đổi độ phân giải có thành công hay không.

Giảm độ phân giải là một thủ thuật có thể giúp chơi một số trò chơi trên phần cứng cũ hơn, kém mạnh mẽ hơn. Việc thay đổi độ phân giải qua lại theo cách thủ công sẽ sớm gây mệt mỏi, vì vậy câu trả lời rõ ràng là thực hiện việc đó từ trong một tập lệnh.

Các lệnh mà chúng ta sắp xem xét đã được cài đặt theo tiêu chuẩn trên tất cả các bản phân phối mà chúng tôi đã kiểm tra, do đó không cần phải cài đặt bất cứ thứ gì. Bạn có thể sử dụng các kỹ thuật này ngay lập tức và tập lệnh của bạn phải có khả năng di chuyển được trên các bản phân phối khác nhau.

2. Sử dụng lệnh xrandr

Lệnh xrandr có thể được sử dụng để đặt và truy vấn độ phân giải màn hình. Theo mặc định, không có tham số, nó tạo ra danh sách các chế độ video được màn hình hoặc các màn hình của bạn hỗ trợ.

Mã nguồn [Chọn]
xrandr

Các chế độ video ưa thích được theo sau bởi dấu cộng "+" và chế độ video hiện tại được theo sau bởi dấu hoa thị "*".

Màn hình này chỉ có một chế độ video ưa thích và đó chính là chế độ video hiện tại. Mặc dù bạn có thể có một số chế độ ưa thích nhưng chỉ có thể có một chế độ hiện tại. Điều đó có nghĩa là nếu chúng ta có thể tìm thấy dòng có dấu hoa thị trong đó, chúng ta có thể xác định cài đặt chế độ video hiện tại là gì.

Bạn có thể xem các ví dụ trực tuyến về những gì họ làm. Họ sử dụng grep để tìm dòng có dấu hoa thị trong đó, sau đó sử dụng sed hoặc awk để phân tích thông tin chúng tôi quan tâm.

Nhưng có một cách đơn giản hơn. Thông tin trong đầu ra từ xrandr chứa thông tin chi tiết về màn hình "chính được kết nối", bao gồm độ phân giải của chế độ video hiện tại. Chúng ta có thể sử dụng awk để phân tích cú pháp đó mà không cần sử dụng grep.

Mã nguồn [Chọn]
xrandr | awk -F'[ +]' '/primary/{print $4}'

Đây là cách nó hoạt động. Chúng tôi sử dụng tùy chọn -F (dấu tách trường) để thông báo cho awk rằng dấu cách và dấu cộng "+" sẽ được coi là dấu phân cách trường. Chúng tôi đang tìm kiếm các dòng có từ "chính" trong đó. Từ này được chọn vì nó xuất hiện trong dòng mà chúng tôi quan tâm và không xuất hiện ở bất kỳ nơi nào khác trong đầu ra từ xrandr.

Việc chia dòng đó thành các trường tại các khoảng trắng và dấu cộng "+" có nghĩa là độ phân giải hiện tại nằm ở trường bốn.

Chúng tôi sử dụng lệnh in awk để in trường thứ tư. Vì chúng tôi cũng đang tách các trường ở dấu cộng nên "+0+0" bị cắt bớt ở mặt sau của độ phân giải, trở thành trường năm và sáu. Chúng tôi không quan tâm đến những điều đó.

3. Sử dụng lệnh xdpyinfo

Theo mặc định, lệnh xdpyinfo hiển thị nhiều thông tin về màn hình của bạn và các chế độ video có sẵn. Nó tạo ra hơn 1000 dòng đầu ra trên máy thử nghiệm của chúng tôi.

Mã nguồn [Chọn]
xdpyinfo

Chế độ hiện tại được mô tả chi tiết hơn các chế độ có sẵn khác. Dòng mô tả độ phân giải của chế độ hiện tại bao gồm từ "kích thước". Từ đó không xuất hiện ở bất kỳ nơi nào khác trong kết quả đầu ra, vì vậy chúng ta có thể sử dụng nó để tách dòng quan tâm bằng cách sử dụng awk.

Mã nguồn [Chọn]
xdpyinfo | awk '/dimensions/ {print $2}'

Đó là một lệnh đơn giản hơn lệnh chúng ta đã sử dụng với xrandr, vì chúng ta không cần chỉ định bất kỳ dấu phân cách trường nào. awk mặc định sử dụng khoảng trắng làm dấu phân cách trường và đó là tất cả những gì chúng tôi phải giải quyết trong đầu ra từ xdpyinfo. Độ phân giải là trường thứ hai trong dòng đầu ra và {print $2} ghi trường đó vào cửa sổ đầu cuối cho chúng ta.

4. Đưa nó vào một kịch bản

Việc sử dụng một trong hai kỹ thuật này trong tập lệnh đòi hỏi rất ít nỗ lực. Chúng tôi cần có một biến để giữ độ phân giải được phát hiện để chúng tôi có thể đưa ra phán quyết trong tập lệnh của mình về việc liệu nó nên tiếp tục xử lý hay thoát nếu độ phân giải màn hình hiện tại không đáp ứng nhu cầu cụ thể của nó.

Sao chép những dòng này vào trình chỉnh sửa, lưu tệp dưới dạng "get_res.sh", sau đó đóng trình chỉnh sửa của bạn.

Mã nguồn [Chọn]
#!/bin/bash

current_res=$(xdpyinfo | awk '/dimensions/ {print $2}')

echo $current_res

Chúng ta sẽ cần làm cho tập lệnh có thể thực thi được bằng lệnh chmod.

Mã nguồn [Chọn]
chmod +x get_res.sh

Điều này gán đầu ra của lệnh awk cho một biến có tên là current_res và lặp lại giá trị của biến đó cho cửa sổ terminal. Hãy chạy kịch bản.

Mã nguồn [Chọn]
./get_res.sh

Thật đáng khích lệ, chúng tôi thấy kết quả tương tự như khi chạy các lệnh trong cửa sổ terminal theo cách thủ công.

5. Tách độ phân giải X và Y

Nếu bạn muốn tách riêng độ phân giải X và Y, chúng ta có thể thêm một vài dòng để thực hiện việc đó. Sao chép những dòng này vào trình chỉnh sửa của bạn, lưu tệp dưới dạng get_x_y.sh và đóng trình chỉnh sửa của bạn.

Mã nguồn [Chọn]
#!/bin/bash

current_res=$(xdpyinfo | awk '/dimensions/ {print $2}')

current_x=$(echo $current_res | awk -F'[ x]' '{print $1}')
current_y=$(echo $current_res | awk -F'[ x]' '{print $2}')

echo $current_res
echo $current_x
echo $current_y

Chúng ta có thể sử dụng awk để trích xuất độ phân giải X từ giá trị được lưu trữ trong biến current_res và lưu kết quả vào một biến có tên current_x. Chúng tôi lặp lại quy trình để trích xuất độ phân giải Y và gán nó cho một biến có tên current_y. Cuối cùng, chúng tôi in cả ba biến.

Một lần nữa, chúng ta cần sử dụng chmod để làm cho nó có thể thực thi được.

Mã nguồn [Chọn]
chmod +x get_x_y.sh

Đây là kết quả từ tập lệnh trên máy thử nghiệm của chúng tôi.

Mã nguồn [Chọn]
./get_x_y.sh

Việc có độ phân giải X và Y làm các biến riêng lẻ cho phép bạn so sánh trên từng thứ nguyên. Có lẽ chỉ độ phân giải theo chiều ngang mới quan trọng đối với bạn và miễn là nó đáp ứng hoặc vượt quá mức tối thiểu, tập lệnh của bạn có thể tiếp tục.

6. Giữ nó ngọt ngào và đơn giản

Khả năng tách biệt độ phân giải dọc và ngang cho phép bạn kiểm tra một trong hai hoặc cả hai để đảm bảo tập lệnh nhạy cảm với độ phân giải của bạn có thể tiếp tục. Nó cũng cho phép bạn sử dụng các giá trị làm tham số dòng lệnh cho các ứng dụng khác cần được khởi chạy với thông tin đó.

Việc nắm giữ những giá trị này không cần phải phức tạp. Ngay cả một chút kiến thức về các tiện ích Linux tiêu chuẩn như awk cũng sẽ bù lại thời gian đã bỏ ra để tìm hiểu chúng gấp nhiều lần.