On 12/13/23 09:24, Carsten Grzemba via openindiana-discuss wrote:
I don't know when I have seen the last time the printer applet in mate-panel.
On my attempts to revive the applet I stumbled on the abstract socket stuff in
the Python code of applet.py
If i try to start
/usr/share/system-config-printer/applet.py I get the exception
Process already running (2:No such file or directory). Exiting.
For the used syntax
sock.bind("\0printer-applet-lock-user-" + getpass.getuser())
the error is 2:No such file or directory, the "Process already running" notice
is the interpretation of the exception handler
A sock.bind with an normal string works, but not the style with the leading \0.
This is the syntax for abstract sockets on Linux.
I have no idea if abstract sockets would work on Illumos and Python. But how
should work the printer applet on non Linux systems?
Linux unix(7) says:
> The abstract socket namespace is a nonportable Linux extension.
It looks like there's support for this in the out-of-illumos-gate lx brand:
https://github.com/TritonDataCenter/illumos-joyent/blob/master/usr/src/uts/common/brand/lx/syscall/lx_socket.c#L390
but that's not handled in the native syscall.
But you can very much do in userspace what this does in the kernel:
replace the NUL at the start of the pathname with the path to a
sticky-bitted world-writable directory.
This appears to fix it for me:
--- applet.py~ Tue Mar 14 12:01:25 2023
+++ applet.py Wed Dec 13 14:59:02 2023
@@ -464,7 +464,7 @@
try:
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
# Create an abstract socket, by prefixing it with null.
- sock.bind("\0printer-applet-lock-user-" + getpass.getuser())
+ sock.bind("/tmp/printer-applet-lock-user-" + getpass.getuser())
except socket.error as err:
error_code = err.args[0]
error_string = err.args[1]
but maybe /tmp isn't the best place..
_______________________________________________
openindiana-discuss mailing list
openindiana-discuss@openindiana.org
https://openindiana.org/mailman/listinfo/openindiana-discuss