Hi,

On 2025-09-30 at 14:13 -0400, Dave Mielke <[email protected]> wrote:
 > [quoted lines by Aura Kelloniemi on 2025/09/29 at 23:02 +0300]

 > >1) It still reports "no screen".

 > No one else is having this problem. There's clearly something unique about
 > your system and/or your brltty installation.

Perhaps my explanation has been unclear. Let me try again:

BRLTTY is unable to access console on my system, because /dev/tty0 is
accessible only by the root user, its mode is 0600 and ownership root:tty.

I'm running kernel 6.16.9-arch1-1 and there are no udev rules which affect
permissions of my /dev/tty0, so it seems these permissions are the kernel
default.

If brltty is not running at root, there is no chance that it could access
/dev/tty0.

This is confirmed by the debug log that I sent attached to my first message in
this thread. I will reattach the same log into this message.

 > >2)  Every time I connect my braille display using USB, it starts a
 > >    new BRLTTY instance. I cannot use BrlAPI applications with this 
 > > instance.

 > Yes. Since the udev mechanism can start several instances, and since they
 > can't all serve the same brlapi port, this would need special
 > configuration.

This is a separate topic I hopefully have time to return to shortly in a new
thread.

 > >Also I wonder whether there is a better way to give BRLTTY accewss to 
 > >devices
 > >than changing the permissions of the device node. Changes to device
 > >permissions will last even if BRLTTY is stopped. In case system user IDs
 > >change (e.g. due to package removals/installs) it may be that some process
 > >unintentionally gains access to some devices.

 > I'm open to ideas. Also, just to be sure that no one misunderstands, the
 > actual node permissions aren't changed. ACLs are added that grant access
 > specifically to the brltty user.

Would this work?

1) Start BRLTTY as root.
2) unshare. Detach from the common mounts namespace.
3) Mount private tmpfs. Only BRLTTY process has access to this file system.
4) Create necessary device nodes in this private file system. Not all device
nodes need to be created, only those for which cannot be accessed from /dev
directly.
5) Switch user to brltty and drop all privileges.
6) Once BRLTTY exits or is killed, the mount namespace becomes empty and the
tmpfs is cleaned up.

-- 
Aura

brltty: brltty: Console Encoding: UTF-8
program exit event added: log
BRLTTY 6.8 rev BRLTTY-6.8-11-g5c386968+ [https://brltty.app/]
brltty: lock descriptor allocated: queue-discarded-elements
brltty: Log File: <system>
brltty: Log Level: debug,debug
brltty: Messages Locale: C.UTF-8
brltty: Messages Domain: brltty
brltty: Messages Directory: /usr/share/locale
brltty: Autospeak Threshold: none
brltty: Privilege Parameter: path=
brltty: Privilege Parameter: scfmode=
brltty: Privilege Parameter: shell=
brltty: Privilege Parameter: user=
brltty: capabilities: initial: cap_sys_admin,cap_sys_tty_config,cap_mknod=eip
brltty: environment variable set: PATH: /bin:/usr/bin
brltty: environment variable set: SHELL: /bin/sh
brltty: temporary capability already added: cap_sys_admin (for isolating 
namespaces)
brltty: isolating namespace: cgroup (control groups)
brltty: isolating namespace: mount (mount points)
brltty: isolating namespace: UTS (host name and NIS domain name)
brltty: executing as the invoking user: brltty
brltty: not claiming state directories
brltty: capability not permitted: cap_sys_module
brltty: temporary capability not granted: cap_sys_module (for installing kernel 
modules)
brltty: checking group owner of path: /dev/vcs1
brltty: checking group owner of path: /dev/tty1
brltty: checking group owner of path: /dev/ttyS0
brltty: checking group owner of path: /dev/bus/usb
brltty: checking group owner of path: /dev/snd/seq
brltty: checking group owner of path: /dev/input/mice
brltty: checking group owner of path: /dev/uinput
brltty: path not group readable: /dev/uinput
brltty: path not group writable: /dev/uinput
brltty: checking group owner of path: /etc/brlapi.key
brltty: capabilities: temporary: cap_sys_admin,cap_sys_tty_config,cap_mknod=eip
brltty: checking group owner of path: /dev/vcs1
brltty: checking group owner of path: /dev/tty1
brltty: checking group owner of path: /dev/ttyS0
brltty: checking group owner of path: /dev/bus/usb
brltty: checking group owner of path: /dev/snd/seq
brltty: checking group owner of path: /dev/input/mice
brltty: checking group owner of path: /dev/uinput
brltty: checking group owner of path: /etc/brlapi.key
brltty: capabilities: permanent: cap_sys_admin,cap_sys_tty_config,cap_mknod=ep
brltty: pushed command environment: initial
brltty: report listener registered: 0: handleUpdateBrailleDeviceOnline
brltty: lock descriptor allocated: umask
brltty: program exit event added: pid-file
brltty: program exit event added: screen-data
brltty: Working Directory: /
brltty: Configuration File: /etc/brltty.conf
brltty: Tables Directory: /usr/share/brltty
brltty: Drivers Directory: /usr/lib/brltty
brltty: Helpers Directory: /usr/libexec/brltty
brltty: Writable Directory: /run/brltty
brltty: Updatable Directory: /var/lib/brltty
brltty: Preferences File: /var/lib/brltty/brltty.prefs
brltty: loading preferences file: /var/lib/brltty/brltty.prefs
brltty: file opened: /var/lib/brltty/brltty.prefs fd=6
brltty: file opened: /var/lib/brltty/brltty.prefs fd=6
brltty: program exit event added: tunes
brltty: tune thread state change: 0 -> 1
brltty: tune thread state change: 1 -> 3
brltty: regions: text=0.0 status=0.0
brltty: shifts: full=1 half=0 vertical=5
brltty: program exit event added: prompt-patterns
brltty: compiling text table: /usr/share/brltty/Text/aura.ttb
brltty: file opened: /etc/xdg/brltty/aura.ttb fd=10
brltty: including data file: /usr/share/brltty/Text/aura.ttb
brltty: lock descriptor allocated: text-table
brltty: Text Table: aura
brltty: program exit event added: text-table
brltty: lock descriptor allocated: contraction-table
brltty: using internal contraction table: none
brltty: Contraction Table: none
brltty: program exit event added: contraction-table
brltty: Attributes Table: left_right
brltty: program exit event added: attributes-table
brltty: Keyboard Property: type=
brltty: Keyboard Property: vendor=
brltty: Keyboard Property: product=
brltty: program exit event added: keyboard-table
brltty: keyboard table changed: off -> off
brltty: Keyboard Table: off
brltty: program exit event added: gui-keyboard-table
brltty: GUI keyboard table changed: off -> off
brltty: GUI Keyboard Table: off
brltty: program exit event added: screen-driver
brltty: activity action request: screen-driver: start
brltty: activity state change: screen-driver: 4[preparing]
brltty: activity state change: screen-driver: 1[prepared]
brltty: activity state change: screen-driver: 2[scheduled]
brltty: program exit event added: braille-data
brltty: program exit event added: braille-driver
brltty: activity action request: braille-driver: start
brltty: activity state change: braille-driver: 4[preparing]
brltty: Braille Display Dimensions: 1 column, 1 row
brltty: regions: text=0.1 status=0.0
brltty: shifts: full=1 half=0 vertical=5
brltty: activity state change: braille-driver: 1[prepared]
brltty: activity state change: braille-driver: 2[scheduled]
brltty: program exit event added: speech-data
brltty: program exit event added: speech-driver
brltty: activity action request: speech-driver: start
brltty: activity state change: speech-driver: 4[preparing]
brltty: activity state change: speech-driver: 1[prepared]
brltty: activity state change: speech-driver: 2[scheduled]
brltty: Speech Input: off
brltty: BrlAPI Server: release 0.8.7
brltty: API Parameter: auth=keyfile:/etc/brlapi.key
brltty: API Parameter: host=
brltty: program exit event added: address-table
brltty: program exit event added: api-server
brltty: program exit event added: sessions
brltty: pushed command environment: main
brltty: pushed command handler: unhandled
brltty: pushed command handler: miscellaneous
brltty: pushed command handler: learn
brltty: pushed command handler: speech
brltty: lock descriptor allocated: main-clipboard
brltty: program exit event added: main-clipboard
brltty: pushed command handler: clipboard
brltty: pushed command handler: preferences
brltty: pushed command handler: toggle
brltty: report listener registered: 3: brailleWindowUpdatedListener
brltty: pushed command handler: touch
brltty: report listener registered: 0: keycodeCommandDataResetListener
brltty: pushed command handler: keycodes
brltty: report listener registered: 0: inputCommandDataResetListener
brltty: pushed command handler: input
brltty: pushed command handler: navigation
brltty: pushed command handler: override
brltty: pushed command handler: screen
brltty: pushed command handler: custom
brltty: pushed command handler: API
brltty: activity state change: screen-driver: 6[starting]
brltty: checking for screen driver: lx
brltty: initializing screen driver: lx
brltty: device directory: /dev
brltty: checking screen device: /dev/vcsa
brltty: screen device: vcsa
brltty: checking console device: /dev/tty0
brltty: console device: tty0
brltty: checking unicode device: /dev/vcsu
brltty: unicode device: vcsu
brltty: cannot open device: /dev/tty0: Permission denied
brltty: cannot contain device files: /run/brltty
brltty: main console open error 1: Operation not permitted
brltty: screen driver initialization failed: lx
brltty: screen driver not found
brltty: activity action failed: screen-driver: start
brltty: activity state change: screen-driver: 2[scheduled]
brltty: activity state change: braille-driver: 6[starting]
brltty: checking braille device: bluetooth:D8:B6:73:90:57:B6
brltty: braille device type: Bluetooth
brltty: another BrlAPI server is already listening on 0 (file 
/var/lib/BrlAPI/.0 exists)
brltty: error while creating socket 0
brltty: program exit event added: bluetooth-device-queue
brltty: checking for braille driver: fs
brltty: initializing braille driver: fs -> bluetooth:D8:B6:73:90:57:B6
brltty: device open error: /dev/hidraw0: Permission denied
brltty: device open error: /dev/hidraw1: Permission denied
brltty: device open error: /dev/hidraw2: Permission denied
brltty: device open error: /dev/hidraw3: Permission denied
brltty: device open error: /dev/hidraw4: Permission denied
brltty: device open error: /dev/hidraw5: Permission denied
brltty: device open error: /dev/hidraw6: Permission denied
brltty: device open error: /dev/hidraw7: Permission denied
brltty: device open error: /dev/hidraw8: Permission denied
brltty: device open error: /dev/hidraw9: Permission denied
brltty: device open error: /dev/hidraw10: Permission denied
brltty: device open error: /dev/hidraw13: Permission denied
brltty: device open error: /dev/hidraw14: Permission denied
brltty: device open error: /dev/hidraw11: Permission denied
brltty: device open error: /dev/hidraw12: Permission denied
brltty: activity state change: speech-driver: 6[starting]
brltty: checking for speech driver: no
brltty: initializing speech driver: no
brltty: Speech Driver: no [NoSpeech]
brltty: activity state change: speech-driver: 3[started]
brltty: Detected Focus 40: cells=40, firmware=5.82-26
brltty: Manufacturer: FREEDOM SCIENTIFIC
brltty: Model: Focus 40
brltty: Firmware: 5.82-26
brltty: Braille Display Dimensions: 40 columns, 1 row
brltty: regions: text=0.40 status=0.0
brltty: shifts: full=40 half=20 vertical=5
brltty: Key Bindings: focus40
brltty: program exit event added: sorted-command-table
brltty: file opened: /etc/xdg/brltty/focus40.ktb fd=18
brltty: including data file: /usr/share/brltty/Input/fs/focus40.ktb
brltty: file opened: /etc/xdg/brltty/focus_blue.kti fd=19
brltty: including data file: /etc/xdg/brltty/focus_blue.kti
brltty: program exit event added: sorted-keyboard-functions
brltty: Key Table: /usr/share/brltty/Input/fs/focus40.ktb
brltty: constructing special screen: help
brltty: lock descriptor allocated: braille-driver
brltty: braille is online
brltty: Braille Driver: fs [FreedomScientific]
brltty: Braille Device: bluetooth:D8:B6:73:90:57:B6
brltty: Old Preferences File: /etc/brltty-fs.prefs
brltty: report listener registered: 0: brlapi_handleReports
brltty: regions: text=0.40 status=0.0
brltty: shifts: full=40 half=20 vertical=5
brltty: setting braille firmness: 0
brltty: activity state change: braille-driver: 3[started]
brltty: report listener unregistered: 0: brlapi_handleReports
brltty: pushed command environment: message
brltty: pushed command handler: message
brltty: activity state change: screen-driver: 6[starting]
brltty: checking for screen driver: lx
brltty: initializing screen driver: lx
brltty: checking screen device: /dev/vcsa
brltty: screen device: vcsa
brltty: checking console device: /dev/tty0
brltty: console device: tty0
brltty: checking unicode device: /dev/vcsu
brltty: unicode device: vcsu
brltty: cannot open device: /dev/tty0: Permission denied
brltty: cannot contain device files: /run/brltty
brltty: main console open error 1: Operation not permitted
brltty: screen driver initialization failed: lx
brltty: screen driver not found
brltty: activity action failed: screen-driver: start
_______________________________________________
This message was sent via the BRLTTY mailing list.
To post a message, send an e-mail to: [email protected]
For general information, go to: http://brltty.app/mailman/listinfo/brltty

Reply via email to