====== ScanServJS ====== At first i tried to make **saned** work, the great network extension to Sane scan tool for Linux. Unfortunately it turns out that the scanner i own (a MFD HP Laser printer/scanner) cannot be shared with saned over the network because the HP provided driver does not allow it. Frankly it seems more an oversight / bug than anything else, but still that's an issue, because i do not want to install HP drivers on all my computers just for scanning. Luckly, [[https://github.com/sbs20/scanservjs|ScanServJS]] is very nice, simple and powerful WEB GUI to the sane backend which works wonders and can be self-hosted on your home server. ===== Prerequisites ===== ScanServJs require, of course, sane-backends package to be installed and your scanners to be configured to work locally on the server. I will not cover those steps here, i assume your scanner is already properly configured and can scan with the **saned** user on the server. You must install **nodejs** and the **deb2targz** packages, because ScanServJS is deployed as a DEB package and requires NodeJS to run. So, if you don't already have them: emerge -vp app-arch/deb2targz nodejs Also, you might want to install **tesseract** to enable OCR functionalities. ===== Installation ===== You will need to alter a little bit the content of the DEB package, because it's better to install it on **/opt/scanservjs** rather than having it mess with your **/usr** and **/var** system folders, so as root: mkdir /opt/scanservjs chown saned:scanner /opt/scanservjs And then now, as user **saned**: sudo -u saned bash cd /opt/scanservjs wget https://github.com/sbs20/scanservjs/releases/ << get here latest deb file for your server >> deb2targz scanservjs_X.Y.Z-1_all.deb tar xvf scanservjs_X.Y.Z-1_all.tar.xz cd usr/lib/scanservjs Now, since the DEB package assumes it's installed on **/usr** you need to recreate two symlinks: rm config ln -s /opt/scanservjs/etc/scanservjs config rm data ln -s /opt/scanservjs/var/lib/scanservjs data Now move the default config file from **/opt/scanservjs/etc/scanservjs/config.default.js** to **/opt/scanservjs/etc/scanservjs/config.local.js** and edit to resemble the following (adapt where needed): const options = { paths: ['/opt/scanservjs/usr/lib/scanservjs'] }; config.host = '127.0.0.1'; config.port = 7781; config.scanimage = '/usr/sbin/scanimage'; config.convert = '/usr/bin/convert'; ... [ omissis ] ... And that's it! ===== NGINX configuration ===== I choose to install ScanServJS as a sub-path of my **home.mydomain.com**, so this is the relative NGINX config file: location = /scanner { return 301 https://$host/scanner/; } # Interfaccia Web stmapante HP location /scanner/ { proxy_pass http://10.70.43.1:7781/; } For more details, see [[selfhost:nginx|The Reverse Proxy concept]] And restart your NGINX service. ===== Start and Autostart ===== Since i use OpenRC, just drop the following **/etc/init.d/scanservjs**: #!/sbin/openrc-run # Copyright 1999-2021 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 description="SCan from web interface" pidfile="/run/scanservjs.pid" command_background=true command="node /opt/scanservjs/usr/lib/scanservjs/server/server.js " command_args="" command_user="saned:scanner" depend() { need net } start_pre() { cd /opt/scanservjs/usr/lib/scanservjs export NODE_ENV=production } make it executable and add it to the default runlevel: chmod +x /etc/init.d/scanservjs rc-update add /etc/init.d/scanservjs default /etc/init.d/scanservjs start ===== Update ===== Get new DEB, replace files, restart!