Điểm:1

Tiêu điểm c930e của Logitech hoàn nguyên về cài đặt mặc định ngay cả với các quy tắc udev tùy chỉnh

lá cờ cn

Hệ điều hành: Ubuntu 20.04 (Focal Fossa)

Gần đây, tôi đã mua một máy ảnh Logitech c930e để sử dụng trong các kỳ thi có giám thị trực tuyến, trong đó giám thị có thể yêu cầu xuất trình ID do chính phủ cấp. Máy ảnh có chức năng lấy nét tự động, ban đầu có thể lấy nét vào các vật thể ở gần (nếu một vật thể được đặt ở phía trước máy ảnh khi khởi động), nhưng một khi nó chuyển tiêu điểm sang các vật thể ở xa, nó không thể phát hiện lại và lấy nét lại các vật thể ở gần sau đó đặt trước máy ảnh. Điều này làm cho văn bản trên giấy tờ tùy thân do chính phủ cấp được đặt trước máy ảnh trở nên không đọc được.

Sau một số nghiên cứu ban đầu, hóa ra tôi có thể cài đặt v4l-utils và lấy danh sách các tham số mà tôi có thể điều chỉnh trên máy ảnh như sau (giả sử nút thiết bị được liên kết là /dev/video1):

$ v4l2-ctl -d /dev/video1 --list-ctrls

Lọc đầu ra để chỉ bao gồm các tùy chọn liên quan đến tiêu điểm mang lại:

$ v4l2-ctl -d /dev/video1 --list-ctrls | tập trung grep
                 focus_absolute 0x009a090a (int): tối thiểu=0 tối đa=255 bước=5 mặc định=0 giá trị=0 cờ=không hoạt động
                     focus_auto 0x009a090c (bool): mặc định=1 giá trị=1

Cho nên focus_auto được đặt thành 1focus_absolute đến 0 theo mặc định, cũng có thể được nhìn thấy bằng cách chạy các lệnh sau:

$ v4l2-ctl -d /dev/video1 --get-ctrl focus_auto
focus_auto: 1
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_absolute
tiêu điểm_tuyệt đối: 0

Sau một số thử nghiệm thủ công, có vẻ như tiêu điểm_tự động: 0tiêu điểm_tuyệt đối: 75 mang lại sự cân bằng tốt trong việc làm cho văn bản cận cảnh đủ rõ ràng trong khi không làm mờ quá nhiều các đối tượng ở xa:

$ v4l2-ctl -d /dev/video1 --set-ctrl focus_auto=0
$ v4l2-ctl -d /dev/video1 --set-ctrl focus_absolute=75

Vì vậy, tôi viết một tệp quy tắc udev /etc/udev/rules.d/90-logitech-c930e.rules để áp dụng các cài đặt này:

KERNEL=="video[0-9]*", SUBSYSTEM=="video4linux", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0843", RUN+="/usr/bin/v4l2- ctl -d $devnode --set-ctrl focus_auto=0", RUN+="/usr/bin/v4l2-ctl -d $devnode --set-ctrl focus_absolute=75"

Tập tin này cũng có thể được tìm thấy trên GitHub

Các idNhà cung cấp: 046didSản phẩm: 0843 tôi thu được với lsusb:

$ lsusb | grep Logitech
Bus 001 Thiết bị 002: ID 046d:0843 Logitech, Inc. Webcam C930e

Sau đó tôi khởi động lại systemd-udevd.service:

$ Sudo systemctl khởi động lại systemd-udevd.service

Rút phích cắm của máy ảnh và cắm lại. Trong vài giây đầu tiên, focus_auto được đặt thành 0focus_absolute đến 75 như mong đợi:

$ v4l2-ctl -d /dev/video1 --get-ctrl focus_auto
tiêu điểm_tự động: 0
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_absolute
tiêu điểm_tuyệt đối: 75

Nhưng sau vài chục giây, các cài đặt được hoàn nguyên về mặc định:

$ v4l2-ctl -d /dev/video1 --get-ctrl focus_auto
focus_auto: 1
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_absolute
tiêu điểm_tuyệt đối: 0

Tại sao có thể như vậy? Có thể vô hiệu hóa hành vi này? Nếu vậy, làm thế nào?

Điểm:1
lá cờ cn

Sau một số nghiên cứu bổ sung, có vẻ như việc tự động khôi phục cài đặt mặc định là Tính năng, Không phải Lỗi (TM): https://www.reddit.com/r/obs/comments/fflg5g/logitech_cam_keeps_resetting_video_settings_back/

Vì vậy, tôi nảy ra một ý tưởng: điều gì sẽ xảy ra nếu tôi có thể đặt tiêu điểm cứ sau vài giây hoặc lâu hơn để ngăn các cài đặt quay trở lại giá trị mặc định? Hóa ra điều này là có thể, mặc dù không trực tiếp với udev vì đây là một quá trình dài hạn và các quy tắc của udev đang chặn. Thay vào đó, tôi đã sử dụng kết hợp các quy tắc udev, đơn vị thiết bị systemd và đơn vị dịch vụ.

Ý tưởng cấp cao như sau:

  • Tạo tệp quy tắc udev gắn thẻ systemd để đơn vị thiết bị được liên kết được tạo và đặt HỆ THỐNGD_WANTS để trỏ tới tệp đơn vị mẫu dịch vụ, chuyển số thiết bị phụ tới mẫu
  • Đơn vị mẫu dịch vụ chạy tập lệnh, chuyển đối số của nó (số thiết bị phụ) tới tập lệnh
  • Tập lệnh sử dụng số thiết bị phụ để chỉ đúng máy ảnh và đặt các tham số lấy nét liên tục trên máy ảnh đó, trong khoảng thời gian 5 giây

Giải pháp chi tiết có thể được tìm thấy trong ý chính này.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.