В ходе моих исследований способа сделать фреймбуфер Linux полностью черным, я наткнулся на следующую вещь, объяснение которой я ищу:
- командная строка:
dd if=/dev/zero of=/dev/fb0
приводит к полностью черному буферу кадра - Python:
Path('/dev/fb0').write_bytes(FBSIZE * b"0")
приводит к полностьюсерыйкадровый буфер
Играя с b"0", я мог сделать буфер кадра светлее или темнее, но не полностью черным.
Что из /dev/zero
этого получается не такого, как b"0"
в Python?
(Чтобы быть полным, я в конечном итоге использовал setterm --clear all
, но это явление продолжает меня беспокоить.)
Любая информация по этому поводу будет оценена по достоинству. Спасибо!
решение1
Вы неправильно используете b'0'
- это "нулевой символ" - как в числе или значении ASCII 0x30
/ 48
... отсюда и серый цвет. На самом деле вам нужен буквальный "нулевая стоимость", часто называемый "ноль", или значение ASCII 0x00
/ 0
.
Чтобы получить это, попробуйте вместо этого использовать последовательность escape b'\0'
или b'\x00'
.
То, что вы сейчас используете, можно также достичь с помощью escape-последовательности b'\x30'
.
$ python3 -c 'from pathlib import Path; Path("test.bin").write_bytes(8 * b"0")'
$ hexdump -Cv < test.bin
00000000 30 30 30 30 30 30 30 30 |00000000|
00000008
$ python3 -c 'from pathlib import Path; Path("test.bin").write_bytes(8 * b"\x00")'
$ hexdump -Cv < test.bin
00000000 00 00 00 00 00 00 00 00 |........|
00000008
$ python3 -c 'from pathlib import Path; Path("test.bin").write_bytes(b"Hello012")'
$ hexdump -Cv < test.bin
00000000 48 65 6c 6c 6f 30 31 32 |Hello012|
00000008