GithubHelp home page GithubHelp logo

jezerm / nody-greeter Goto Github PK

View Code? Open in Web Editor NEW
117.0 3.0 8.0 8.88 MB

LightDM greeter that allows to create wonderful themes with web technologies. Made in Node.js

Home Page: https://jezerm.github.io/web-greeter-page/

License: GNU General Public License v3.0

JavaScript 19.25% TypeScript 76.92% Shell 0.22% Python 0.14% C++ 3.48%
lightdm-greeter lightdm lightdm-web-greeter nodejs web-greeter nody-greeter

nody-greeter's Introduction

Nody Greeter Icon

Nody Greeter

A LightDM greeter made with Electron.js and NodeGTK

License Information

Web Greeter is created with Python... which sometimes is slow. So, I wanted to re-create it with Node.js!

This is a LightDM Greeter made with Electron.js and node-gtk that allows to create web based themes with HTMl, CSS and JavaScript. Also, this could be considered as a side project of web-greeter, both being equal in behavior, but this one is easier to mantain~

Features

  • Create themes with HTML, CSS and JavaScript!
  • Should work everywhere.
  • JavaScript error handling, allowing to load the default theme.
  • Themes could be simple, or very complex.
  • Battery and brightness control.
  • Multi-monitor support, thanks to s0
  • TypeScript based.

Considerations

Themes working in web-greeter should work also here. All themes shipped with web-greeter are found here as well.

  • icon_theme configuration is not loaded, as GTK apps don't allow to set a different X-Cursor-Theme

Dependencies

Build dependencies

  • Node.js (v12, v14 and v16 are supported)
  • Python 3
  • base-devel (build-essentials)

Common dependencies

  • lightdm (as obvious)
  • gobject-introspection
  • liblightdm-gobject
  • liblightdm-gobject-dev
  • libgirepository1.0-dev
  • libcairo2
  • libcairo2-dev
  • libxcb-dev
  • libx11-dev

Installation

git clone --recursive https://github.com/JezerM/nody-greeter.git
cd nody-greeter
npm install
npm run rebuild
npm run build
sudo node make install

This will rebuild electron along with node-gtk, compile typescript with npx tsc, and then build the package root directory inside build/unpacked. Later, install it with node make install.

Also, you can package build/unpacked to whatever you want, like .deb with:

dpkg-deb --root-owner-group --build unpacked

Setting up with LightDM

Inside /etc/lightdm/lightdm.conf, below a Seat configuration, add:

greeter-session=nody-greeter

Afterwards, restart the lightdm service.

Note: Be sure that nody-greeter works before restarting lightdm

Theme JavaScript API

To create themes for nody-greeter and web-greeter, check the documentation available at web-greeter-docs.

Also, you can install the TypeScript types definitions inside your theme with npm:

npm install nody-greeter-types

Additional features

Brightness control

acpi is the only tool needed to control the brightness, besides a compatible device. This functionality is based on acpilight replacement for xbacklight.

udev rules are needed to be applied before using it, check acpilight rules. Then, lightdm will need to be allowed to change backlight values, to do so add lightdm user to video group: sudo usermod -a -G video lightdm

You can enable it inside /etc/lightdm/web-greeter.yml

Battery status

acpi and acpi_listen are the only tools you need (and a battery). This functionality is based on "bat" widget from "lain" awesome-wm library.

You can enable it inside /etc/lightdm/web-greeter.yml.

Debugging

You can run the greeter from within your desktop session if you add the following line to the desktop file for your session located in /usr/share/xsessions/: X-LightDM-Allow-Greeter=true.

You have to log out and log back in after adding that line. Then you can run the greeter from command line.

Themes can be opened with a debug console if you set debug_mode as true inside /etc/lightdm/web-greeter.yml. Or, you could run the nody-greeter with the parameter --debug. I recommend to use the last one, as it is easier and handy.

nody-greeter --debug

Check nody-greeter --help for more commands.

Note: Do not use lightdm --test-mode as it is not supported.

Troubleshooting

node-gyp fails on npm run rebuild

Supported Node.js versions: 12, 14, 15, 16 (other versions should work but are untested)

Make sure you are using a node-gtk supported Node.js version.

nody-greeter's People

Contributors

jezerm avatar s0 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

nody-greeter's Issues

Save previously used user/window manager

Environment

  • OS: Arch Linux
  • nody-greeter version: 1.5.1

Description of feature

In most greeters (in particular, lightdm-gtk-greeter), the last user that logged in, and the window manager that user used, is saved for the next login. However, this greeter, by default, will always select the first user alphabetically, and the first window manager alphabetically. While this behavior can be changed directly by a theme (for example, the Aether theme has a configuration option for the default user), I'd like this to be the standard behavior, as I believe that's much more convenient for most users.

As a side note, for saving the window manager, LightDM is supposed to write a ~/.dmrc file that contains the window manager last selected - however, this file isn't created at all when using this greeter, and I'm assuming it's never read, either.

Possible solutions

The workaround I've been using, at least for default window managers, is directly editing the files in /usr/share/xsessions and adding a number in front to force the window manager I want to be the first alphabetically. However, I don't think a workaround like this exists for users.

Menubar

Environment

  • OS: [e.g. Arch]
  • nody-greeter version: 1.4.1

Description of feature

I'd like for the menubar to be hidden with a toggle or something.

Possible solutions

Have requestFullscreen()

Error: absolute srcpath does not exist

Environment

  • OS: [Nobara-37-KDE]
  • nody-greeter version: output of nody-greeter --version
    (cant use the command since it cant launch)

Bug description

When running sudo node make install it throws the error Error: absolute srcpath does not exist

Steps to reproduce

I've installed npm6.14.18 and node v16.20.0 on nobara-37. I have tried going through the commands after installing npm and node. I have downgraded npm and node to a supported version i.e v16 and v6. Using v8 of npm gives the same error and v7 just has an issue with building.

Expected behavior

I expected it to be able to just let me install it after building it but I've gone through multiple other errors when building and got them sorted out.

Screenshots

image

Konsole Output

[root@penguin-legion nody-greeter]# sudo node make install
Copying nody-greeter to "/"...
/home/penguin/nody-greeter/node_modules/fs-extra/lib/ensure/symlink-paths.js:71
    if (!exists) throw new Error('absolute srcpath does not exist')
                       ^

Error: absolute srcpath does not exist
    at symlinkPathsSync (/home/penguin/nody-greeter/node_modules/fs-extra/lib/ensure/symlink-paths.js:71:24)
    at Object.createSymlinkSync (/home/penguin/nody-greeter/node_modules/fs-extra/lib/ensure/symlink.js:50:20)
    at install (/home/penguin/nody-greeter/install.js:43:6)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async do_install (/home/penguin/nody-greeter/make.js:69:3)

Rebuild process doesn't succeed

Environment

  • OS: Pop OS 21.04
  • nody-greeter version: 1.2.1

Bug description

Running install instructions in npm run rebuild phase fails

Steps to reproduce

  • Clone repository at 5cbd3ac
  • Install dependencies and using node v17.0.1
  • run npm install
  • run npm run rebuild

Expected behavior

Rebuild step completes successfully to continue installation process.

Screenshots

image

Error on Lubuntu 21.10 upon signing in with "Simple" theme

Environment

  • OS: Lubuntu 21.10
  • nody-greeter version: output of nody-greeter --version

Bug description

When signing on with the "Simple" theme or WelcomeXP theme the log on fails.

Steps to reproduce

Use "Simple" theme or WelcomeXP theme (the theme where I found this bug)

Expected behavior

Successful log on

Screenshots

A screenshot of the error on WelcomeXP theme, the same error pops up when logging on with the "Simple" theme.
149672277-4c3b0be3-221e-4c7f-a02b-275c05455418

nody greeter setup questions and issues

Im trying to setup nody-greeter and ive managed to get everything more or less setup but whenever i try to launch debug mode i get a javascript error and then a black screen when the greeter finally loads. the greeter renders correctly until i press okay on the notification.

[hellzbellz@bertiebottpc ~]$ nody-greeter --debug
A JavaScript error occurred in the main process
Uncaught Exception:
Error: Unable to determine socket to daemon
    at new Greeter (/opt/nody-greeter/resources/app.asar/js/bridge/bridge.js:44:24)
    at Object.<anonymous> (/opt/nody-greeter/resources/app.asar/js/bridge/bridge.js:601:1)
    at Module._compile (internal/modules/cjs/loader.js:1078:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1108:10)
    at Module.load (internal/modules/cjs/loader.js:935:32)
    at Module._load (internal/modules/cjs/loader.js:776:14)
    at Function.f._load (electron/js2c/asar_bundle.js:5:12913)
    at Module.require (internal/modules/cjs/loader.js:959:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.<anonymous> (/opt/nody-greeter/resources/app.asar/js/index.js:71:1)
2021-09-11 01:40:02 [ DEBUG ] undefined undefined: Restarting acpi_listen
2021-09-11 01:40:03 [ DEBUG ] browser.js 134: Initializing Browser Window
2021-09-11 01:40:03 [ DEBUG ] browser.js 155: Browser Window created
2021-09-11 01:40:03 [ DEBUG ] browser.js 126: Theme loaded
2021-09-11 01:40:03 [ DEBUG ] globals.js 63: Logger is ready
2021-09-11 01:40:03 [ DEBUG ] globals.js 36: Window is ready
2021-09-11 01:40:03 [ DEBUG ] undefined undefined: Restarting acpi_listen
2021-09-11 01:40:03 [ DEBUG ] undefined undefined: Restarting acpi_listen
2021-09-11 01:40:03 [ DEBUG ] screensaver.js 49: Screensaver set
2021-09-11 01:40:03 [ DEBUG ] undefined undefined: Restarting acpi_listen
2021-09-11 01:40:03 [ DEBUG ] undefined undefined: Restarting acpi_listen
2021-09-11 01:40:05 [ DEBUG ] browser.js 178: Nody Greeter started
2021-09-11 01:40:38 [ DEBUG ] screensaver.js 61: Screensaver reset

i tried with both prebuilt binary and building from source

just noticed the java error is different from terminal output,
Screenshot from 2021-09-11 01-51-26
Screenshot from 2021-09-11 01-50-25

Duplicate

Duplicate as previous issue wouldn't show up so I thought it wasn't posted

Multi-Monitor Support

Environment

  • N/A

Description of feature

I would like it to be possible for nody-greeter to open an electron BrowserWindow for each monitor / display that a user may have. I have a multi-monitor setup, and would like to create a theme that displays different information on each monitor, one of which will allow the user to log-in.

This would also allow for multi-monitor backgrounds to be displayed if themes could be configured to display different parts of a multi-monitor background on different displays. (I have plans for an animated SVG multi-monitor background to display behind my login screens, probably not too dissimilar to my website wallpaper here: https://samlanning.com/

Possible solutions

I have already got a quick hacky solution working locally, but it wouldn't need too much cleanup before being PR-able I would say.

(I also have to say @JezerM, it was very quick to figure out how to start playing round with the code, thanks for keeping it clean and simple! I've wanted to play around with an electron and node based greeter for a while, and it's great to see it happening!)

It would roughly work by:

  • creating an individual BrowserWindow for each display in screen.getAllDisplays()
  • passing metadata to each browser window (probably via _emit_signal) that includes:
    • the monitor ID,
    • whether the monitor is primary
    • dimensions of the full set of moitors, and the position & size of the relevant monitor
  • updating _emit_signal to send signals for every monitor
  • (optional) allow for cross-window communication between BrowserWindows, for example if a theme allows changing a wallpaper in one window, it may need to notify other windows.

Then the default themes could be updated to only display the UI elements on the primary monitor, and display wallpaper only on other monitors.

If you're not opposed, I'd love to have a crack at this?

Cheers, and thanks again for the wonderful work!

failed to build asar package

Environment

  • OS: Arch Linux
  • nody-greeter version: 1.5.1

Bug description

When trying to build, packaging the asar throws an error having to do with python.

Steps to reproduce

Clone the repo recursively, install npm dependencies, run rebuild, run build.

Expected behavior

Package should build successfully so you can continue with installing

Screenshots

image

nody-greeter install issues

Environment

  • OS: Ubuntu 18.04/Latest Mini ISO
  • nody-greeter version: output of nody-greeter --version

Bug description

When I do npm install it is a very big bug jumble

like npm ERR!

Steps to reproduce

No idea

Expected behavior

A clear and concise description of what you expected to happen.

Screenshots

image

Error in Void Linux while installing

Environment

  • OS: Void Linux
  • nody-greeter version: not able to install
Inspiron_15_3567% node --version
v16.9.1

Bug description

Inspiron_15_3567% git clone https://github.com/JezerM/nody-greeter.git
cd nody-greeter
npm install
npm run rebuild
npx tsc --build
node make build
sudo node make install
Cloning into 'nody-greeter'...
remote: Enumerating objects: 540, done.
remote: Counting objects: 100% (540/540), done.
remote: Compressing objects: 100% (353/353), done.
remote: Total 540 (delta 248), reused 460 (delta 170), pack-reused 0
Receiving objects: 100% (540/540), 6.07 MiB | 1012.00 KiB/s, done.
Resolving deltas: 100% (248/248), done.
npm WARN deprecated [email protected]: this library is no longer supported
npm WARN deprecated [email protected]: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated [email protected]: Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future

added 463 packages, and audited 464 packages in 10s

40 packages are looking for funding
  run `npm fund` for details

10 vulnerabilities (9 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> [email protected] rebuild
> electron-rebuild -w node-gtk

⠸ Building module: node-gtk, Completed: 0gyp info find Python using Python version 3.10.1 found at "/usr/bin/python3"
⠼ Building module: node-gtk, Completed: 0(node:3287) [DEP0150] DeprecationWarning: Setting process.config is deprecated. In the future the property will be read-only.
(Use `node --trace-deprecation ...` to show where the warning was created)
gyp info spawn /usr/bin/python3
gyp info spawn args [
gyp info spawn args   '/home/austin/nody-greeter/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/nody-greeter/node_modules/node-gtk/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/nody-greeter/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/.electron-gyp/13.1.8/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/home/austin/.electron-gyp/13.1.8',
gyp info spawn args   '-Dnode_gyp_dir=/home/austin/nody-greeter/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/home/austin/.electron-gyp/13.1.8/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/home/austin/nody-greeter/node_modules/node-gtk',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
⠴ Building module: node-gtk, Completed: 0/bin/sh: 1: pkg-config: not found
gyp: Call to 'pkg-config --cflags gobject-introspection-1.0 cairo' returned exit status 127 while in binding.gyp. while trying to load binding.gyp
✖ Rebuild Failed

An unhandled error occurred inside electron-rebuild
node-gyp failed to rebuild '/home/austin/nody-greeter/node_modules/node-gtk'.
Error: `gyp` failed with exit code: 1



Error: node-gyp failed to rebuild '/home/austin/nody-greeter/node_modules/node-gtk'.
Error: `gyp` failed with exit code: 1


    at ModuleRebuilder.rebuildNodeGypModule (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/module-rebuilder.js:193:19)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Rebuilder.rebuildModuleAt (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/rebuild.js:190:9)
    at async Rebuilder.rebuild (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/rebuild.js:152:17)
    at async /home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/cli.js:146:9
Building with prefix: /usr
Bindings copied
⠙ Compiling bindings with electron-rebuild...Error: Command failed: npx electron-rebuild -m .
- Searching dependency tree
gyp info find Python using Python version 3.10.1 found at "/usr/bin/python3"
(node:3361) [DEP0150] DeprecationWarning: Setting process.config is deprecated. In the future the property will be read-only.
(Use `node --trace-deprecation ...` to show where the warning was created)
gyp info spawn /usr/bin/python3
gyp info spawn args [
gyp info spawn args   '/home/austin/nody-greeter/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/nody-greeter/js/bindings/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/nody-greeter/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/.electron-gyp/13.1.8/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/home/austin/.electron-gyp/13.1.8',
gyp info spawn args   '-Dnode_gyp_dir=/home/austin/nody-greeter/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/home/austin/.electron-gyp/13.1.8/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/home/austin/nody-greeter/js/bindings',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: g++: No such file or directory
make: *** [screensaver.target.mk:111: Release/obj.target/screensaver/screensaver.o] Error 127
✖ Rebuild Failed

An unhandled error occurred inside electron-rebuild
node-gyp failed to rebuild '/home/austin/nody-greeter/js/bindings'.
Error: `make` failed with exit code: 2



Error: node-gyp failed to rebuild '/home/austin/nody-greeter/js/bindings'.
Error: `make` failed with exit code: 2


    at ModuleRebuilder.rebuildNodeGypModule (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/module-rebuilder.js:193:19)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Rebuilder.rebuildModuleAt (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/rebuild.js:190:9)
    at async Rebuilder.rebuild (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/rebuild.js:152:17)
    at async /home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/cli.js:146:9

    at ChildProcess.exithandler (node:child_process:397:12)
    at ChildProcess.emit (node:events:394:28)
    at maybeClose (node:internal/child_process:1064:16)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:301:5) {
  killed: false,
  code: 255,
  signal: null,
  cmd: 'npx electron-rebuild -m .'
}
✖ electron-rebuild failed
Password: 
nody-greeter is not built
Building with prefix: /usr
Bindings copied
⠙ Compiling bindings with electron-rebuild...Error: Command failed: npx electron-rebuild -m .
- Searching dependency tree
gyp info find Python using Python version 3.10.1 found at "/usr/bin/python3"
gyp WARN EACCES current user ("austin") does not have permission to access the dev dir "/root/.electron-gyp/13.1.8"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/tmp/.node-gyp"
(node:3418) [DEP0150] DeprecationWarning: Setting process.config is deprecated. In the future the property will be read-only.
(Use `node --trace-deprecation ...` to show where the warning was created)
gyp info spawn /usr/bin/python3
gyp info spawn args [
gyp info spawn args   '/home/austin/nody-greeter/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/nody-greeter/js/bindings/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/nody-greeter/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/tmp/.node-gyp/13.1.8/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/tmp/.node-gyp/13.1.8',
gyp info spawn args   '-Dnode_gyp_dir=/home/austin/nody-greeter/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/tmp/.node-gyp/13.1.8/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/home/austin/nody-greeter/js/bindings',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: g++: No such file or directory
make: *** [screensaver.target.mk:111: Release/obj.target/screensaver/screensaver.o] Error 127
✖ Rebuild Failed

An unhandled error occurred inside electron-rebuild
node-gyp failed to rebuild '/home/austin/nody-greeter/js/bindings'.
Error: `make` failed with exit code: 2



Error: node-gyp failed to rebuild '/home/austin/nody-greeter/js/bindings'.
Error: `make` failed with exit code: 2


    at ModuleRebuilder.rebuildNodeGypModule (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/module-rebuilder.js:193:19)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Rebuilder.rebuildModuleAt (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/rebuild.js:190:9)
    at async Rebuilder.rebuild (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/rebuild.js:152:17)
    at async /home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/cli.js:146:9

    at ChildProcess.exithandler (node:child_process:397:12)
    at ChildProcess.emit (node:events:394:28)
    at maybeClose (node:internal/child_process:1064:16)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:301:5) {
  killed: false,
  code: 255,
  signal: null,
  cmd: 'npx electron-rebuild -m .'
}
✖ electron-rebuild failed

Inspiron_15_3567% npm audit fix                                     


removed 1 package, changed 17 packages, and audited 463 packages in 4s

40 packages are looking for funding
  run `npm fund` for details

# npm audit report

ansi-regex  >2.1.1 <5.0.1
Severity: moderate
 Inefficient Regular Expression Complexity in chalk/ansi-regex - https://github.com/advisories/GHSA-93q8-gq69-wqmw
fix available via `npm audit fix`
node_modules/ansi-regex
  strip-ansi  4.0.0 - 5.2.0
  Depends on vulnerable versions of ansi-regex
  node_modules/strip-ansi
    string-width  2.1.0 - 4.1.0
    Depends on vulnerable versions of strip-ansi
    node_modules/string-width

3 moderate severity vulnerabilities

To address all issues, run:
  npm audit fix
Inspiron_15_3567%                                                     

npm install
npm run rebuild
npx tsc --build
node make build
sudo node make install

up to date, audited 463 packages in 1s

40 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

> [email protected] rebuild
> electron-rebuild -w node-gtk

⠸ Building module: node-gtk, Completed: 0gyp info find Python using Python version 3.10.1 found at "/usr/bin/python3"
⠼ Building module: node-gtk, Completed: 0(node:4949) [DEP0150] DeprecationWarning: Setting process.config is deprecated. In the future the property will be read-only.
(Use `node --trace-deprecation ...` to show where the warning was created)
gyp info spawn /usr/bin/python3
gyp info spawn args [
gyp info spawn args   '/home/austin/nody-greeter/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/nody-greeter/node_modules/node-gtk/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/nody-greeter/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/.electron-gyp/13.6.3/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/home/austin/.electron-gyp/13.6.3',
gyp info spawn args   '-Dnode_gyp_dir=/home/austin/nody-greeter/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/home/austin/.electron-gyp/13.6.3/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/home/austin/nody-greeter/node_modules/node-gtk',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
⠴ Building module: node-gtk, Completed: 0/bin/sh: 1: pkg-config: not found
gyp: Call to 'pkg-config --cflags gobject-introspection-1.0 cairo' returned exit status 127 while in binding.gyp. while trying to load binding.gyp
✖ Rebuild Failed

An unhandled error occurred inside electron-rebuild
node-gyp failed to rebuild '/home/austin/nody-greeter/node_modules/node-gtk'.
Error: `gyp` failed with exit code: 1



Error: node-gyp failed to rebuild '/home/austin/nody-greeter/node_modules/node-gtk'.
Error: `gyp` failed with exit code: 1


    at ModuleRebuilder.rebuildNodeGypModule (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/module-rebuilder.js:193:19)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Rebuilder.rebuildModuleAt (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/rebuild.js:190:9)
    at async Rebuilder.rebuild (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/rebuild.js:152:17)
    at async /home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/cli.js:146:9
Building with prefix: /usr
Bindings copied
⠙ Compiling bindings with electron-rebuild...Error: Command failed: npx electron-rebuild -m .
- Searching dependency tree
gyp info find Python using Python version 3.10.1 found at "/usr/bin/python3"
(node:5023) [DEP0150] DeprecationWarning: Setting process.config is deprecated. In the future the property will be read-only.
(Use `node --trace-deprecation ...` to show where the warning was created)
gyp info spawn /usr/bin/python3
gyp info spawn args [
gyp info spawn args   '/home/austin/nody-greeter/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/nody-greeter/js/bindings/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/nody-greeter/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/.electron-gyp/13.6.3/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/home/austin/.electron-gyp/13.6.3',
gyp info spawn args   '-Dnode_gyp_dir=/home/austin/nody-greeter/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/home/austin/.electron-gyp/13.6.3/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/home/austin/nody-greeter/js/bindings',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: g++: No such file or directory
make: *** [screensaver.target.mk:111: Release/obj.target/screensaver/screensaver.o] Error 127
✖ Rebuild Failed

An unhandled error occurred inside electron-rebuild
node-gyp failed to rebuild '/home/austin/nody-greeter/js/bindings'.
Error: `make` failed with exit code: 2



Error: node-gyp failed to rebuild '/home/austin/nody-greeter/js/bindings'.
Error: `make` failed with exit code: 2


    at ModuleRebuilder.rebuildNodeGypModule (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/module-rebuilder.js:193:19)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Rebuilder.rebuildModuleAt (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/rebuild.js:190:9)
    at async Rebuilder.rebuild (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/rebuild.js:152:17)
    at async /home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/cli.js:146:9

    at ChildProcess.exithandler (node:child_process:397:12)
    at ChildProcess.emit (node:events:394:28)
    at maybeClose (node:internal/child_process:1064:16)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:301:5) {
  killed: false,
  code: 255,
  signal: null,
  cmd: 'npx electron-rebuild -m .'
}
✖ electron-rebuild failed
nody-greeter is not built
Building with prefix: /usr
Bindings copied
⠙ Compiling bindings with electron-rebuild...Error: Command failed: npx electron-rebuild -m .
- Searching dependency tree
gyp info find Python using Python version 3.10.1 found at "/usr/bin/python3"
gyp WARN EACCES current user ("austin") does not have permission to access the dev dir "/root/.electron-gyp/13.6.3"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/tmp/.node-gyp"
(node:5074) [DEP0150] DeprecationWarning: Setting process.config is deprecated. In the future the property will be read-only.
(Use `node --trace-deprecation ...` to show where the warning was created)
gyp info spawn /usr/bin/python3
gyp info spawn args [
gyp info spawn args   '/home/austin/nody-greeter/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/nody-greeter/js/bindings/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/austin/nody-greeter/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/tmp/.node-gyp/13.6.3/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/tmp/.node-gyp/13.6.3',
gyp info spawn args   '-Dnode_gyp_dir=/home/austin/nody-greeter/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/tmp/.node-gyp/13.6.3/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/home/austin/nody-greeter/js/bindings',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: g++: No such file or directory
make: *** [screensaver.target.mk:111: Release/obj.target/screensaver/screensaver.o] Error 127
✖ Rebuild Failed

An unhandled error occurred inside electron-rebuild
node-gyp failed to rebuild '/home/austin/nody-greeter/js/bindings'.
Error: `make` failed with exit code: 2



Error: node-gyp failed to rebuild '/home/austin/nody-greeter/js/bindings'.
Error: `make` failed with exit code: 2


    at ModuleRebuilder.rebuildNodeGypModule (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/module-rebuilder.js:193:19)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Rebuilder.rebuildModuleAt (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/rebuild.js:190:9)
    at async Rebuilder.rebuild (/home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/rebuild.js:152:17)
    at async /home/austin/nody-greeter/node_modules/electron-rebuild/lib/src/cli.js:146:9

    at ChildProcess.exithandler (node:child_process:397:12)
    at ChildProcess.emit (node:events:394:28)
    at maybeClose (node:internal/child_process:1064:16)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:301:5) {
  killed: false,
  code: 255,
  signal: null,
  cmd: 'npx electron-rebuild -m .'
}
✖ electron-rebuild failed
Inspiron_15_3567% 


But last time when I tried to install in Void Linux, it worked?
Thank you

Installation Instruction Improvement - TypeScript Compile

Hello!

I was building this project earlier and realized that the TypeScript compiler is never automatically run during the process, which obviously causes issues during the node make build step. This is not a huge issue by any means but can save a few people from a little confusion.

It appears that tsc is invoked with the npm run build target but this was changed in favor of node make build with ed648f4 (which runs the build script indirectly but no longer with the tsc step defined in package.json). Adding a npx tsc step to the installation or otherwise making it so this gets run could be helpful.

got 3 error when running

i got 3 error in preloader.ts, i can't give you the error message but i can point out what is the cause.

first thing is you need to remember that preload script in electron is running in renderer process not in main process, but your tsconfig tell otherwise. you need to change the way you access global variable

first error appear here

window.dispatchEvent(_ready_event);

this _ready_event won't work because after being compiled it will use the wrong global variable.

if you see the compiled version it would be like below

window.addEventListener("DOMContentLoaded", () => {
    setTimeout(() => {
        window.dispatchEvent(exports._ready_event);
    }, 2);
});

it reference to a wrong global variable exports instead of globalThis, global or window. this is caused by your tsconfig moduleResolution that tells the typescript compiler to assume that it was a node module

the same apply with 2 other error

let config = greeter_config.greeter;

let config = greeter_config.greeter;

Unable to store and retrieve correctly from window.localStorage

Environment

  • OS: Arch Linux
  • nody-greeter version: 1.5.1

Bug description

Storing data in localStorage and login results in data lost (or rolled back to previous state)

Steps to reproduce

window.localStorage.getItem("test");//-> Returns value2
window.localStorage.setItem("test","value2");
//do some things
window.localStorage.setItem("test","value1");
lightdm.authenticate(user);
lightdm.respond(pwd);
lightdm.start_session();

Expected behavior

When storing an item into storage and later retrieve it get that value

Misc Improvements

After playing around with this code base for a couple of days, I've had a lot of fun and would love to become more involved! I've had a few ideas for how things could be improved, and happy to go into more detail for any of them, but wanted to open an issue to check that you're open to these kinds of changes before going ahead and doing any of them?

  • Add CI checks for type errors, linting, formatting etc... using GitHub Actions
  • Increase strictness of TypeScript configuration, and eventually enable strict: true
    (I've made a couple of mistakes (like this one), that would have been caught if TypeScript settings were a little stricter).
  • Replace all synchronous I/O operations with async / await
  • Start using JavaScript naming conventions for symbols (variables, classes, etc...)
  • Use io-ts for definition of types for configuration
  • Use io-ts for definition of types for message-passing between windows
  • Pull out all "magic constants" into the consts.ts file introduced in #11 (especially shared strings etc..., so they don't get out-of-sync with one another)
  • Add explicit public / private modifiers to all class methods / properties
  • Replace any binds for methods with lambda methods
  • Migrate default themes to TypeScript
  • Enable sourcemaps for better debugging in both main process and renderer preload.

I'll add more things to this list as I think of them!

How would I go about making a smooth transition to plymouth from lightdm with this greeter

Apologies if this is not the right place to ask

Environment

  • OS: Arch
  • nody-greeter version: output of nody-greeter --version

Description of feature

I set up a custom systemd override for lightdm to make the transition from plymouth smooth like described here https://wiki.archlinux.org/title/Plymouth#Smooth_transition

However I still have a black screen for about 2 seconds after the boot animation, but with a mouse cursor.
That is why I think the greeter is running by this point, but there is still no output until the ui loads

Can I do something about it ? Or can you ? Or is it only a lightdm issue or a plymouth issue ?
I don't really know.

node run build failed

Environment

  • OS: Pop!_OS 22.04
  • npm -v: 8.5.1

Bug description

Trying to run npm run build after the other steps fails

Screenshots

╰─ npm run build  

> [email protected] build
> npm run build:tsc && node make build


> [email protected] build:tsc
> tsc --build && npm run build:themes


> [email protected] build:themes
> npm run build:theme:gruvbox && npm run build:theme:dracula


> [email protected] build:theme:gruvbox
> tsc --build themes/themes/gruvbox


> [email protected] build:theme:dracula
> tsc --build themes/themes/dracula

(node:8639) UnhandledPromiseRejectionWarning: /home/crylia/nody-greeter/build.js:175
    const minor = electronMatch.groups.minor ?? "0";
                                              ^

SyntaxError: Unexpected token '?'
    at wrapSafe (internal/modules/cjs/loader.js:915:16)
    at Module._compile (internal/modules/cjs/loader.js:963:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Module.require (internal/modules/cjs/loader.js:887:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at do_build (/home/crylia/nody-greeter/make.js:73:21)
    at Object.<anonymous> (/home/crylia/nody-greeter/make.js:87:3)
    at Module._compile (internal/modules/cjs/loader.js:999:30)
(node:8639) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:8639) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

npm ci --production failing

Environment

  • OS: Arch

Bug description

When building (at least on a Hyper-V Virtual machine where I am testing) I always get this error when doing npm run build

Building with prefix: /usr
Bindings copied
✔ Bindings compiled succesfully
Resources copied
Installing packages with 'npm ci --production -s'
Error: Command failed: npm ci --production -s
    at checkExecSyncError (node:child_process:871:11)
    at Object.execSync (node:child_process:943:15)
    at create_build (/home/crylia/nody-greeter/build.js:157:19)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async build (/home/crylia/nody-greeter/build.js:352:3) {
  status: 1,
  signal: null,
  output: [ null, null, null ],
  pid: 135427,
  stdout: null,
  stderr: null
}

but this only started to happen the second time I built the package !

Steps to reproduce

clone the repository and follow the instructions

Expected behavior

normal build

However, I have additional info, I edited build.js to remove the "-s" to see the npm error, and it complained about a missing package-lock.json

Then I added a "ls -la" call right above the "npm ci" and it showed the package.json and package-lock.json files both empty at kb !
When checking manually after the build command, the files had the correct content.

I'm suspecting some kind of race condition here.

How to run at system startup...?

Hi, I know - this might sound really dumb (because it probably is), how to actually execute this greeter at system startup?
I scoured the internet for solutions, tried modifying in lightdm.conf the "greeter-session = web-greeter", even used the archived lightdm-webkit2-greeter (it worked with setting "greeter-session = lightdm-webkit2-greeter" in the lightdm config, but I wasn't able to set your lightdm-void-theme https://github.com/JezerM/lightdm-void-theme which I'm interested in). The node-greeter command works though in my desktop environment and launches a greeter, but this isn't my goal.

OS: Void Linux x86_64
Kernel: 5.18.9_1

Thank you guys for any suggestions and help,
Oskar

can't change keyboard layout

Environment

  • OS: Ubuntu 22.10
  • nody-greeter version: 1.5.2

Bug description

error when trying to change keyboard layout

Screenshots

Screenshot from 2023-02-24 13-01-14

theme can not recoginige correct monitor resolution

Environment

Screen 0: minimum 8 x 8, current 3840 x 2160, maximum 32767 x 32767
HDMI-0 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 620mm x 350mm
	CTM: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 
		0 1 
	CscMatrix: 65536 0 0 0 0 65536 0 0 0 0 65536 0 
	BorderDimensions: 4 
		supported: 4
	Border: 0 0 0 0 
		range: (0, 65535)
	SignalFormat: TMDS 
		supported: TMDS
	ConnectorType: HDMI 
	ConnectorNumber: 2 
	_ConnectorLocation: 2 
	non-desktop: 0 
		supported: 0, 1
   3840x2160     59.98*+  59.94    50.00    30.00    29.97    25.00    23.98  
   1920x1080     60.00    60.00    59.94    50.00    29.97    25.00    23.98  
   1440x900      59.89  
   1400x1050     59.98  
   1280x1024     60.02  
   1280x960      60.00  
   1280x720      60.00    59.94    50.00    29.97    25.00    23.98  
   1024x768      60.00  
   800x600       60.32  
   720x480       59.94  
   640x480       59.94    59.93  
  • nody-greeter log
[3629:0926/165827.350019:ERROR:node_bindings.cc(242)] Error parsing Node.js cli flags
2022-09-26 16:58:27 [ ERROR ] acpi.js 36: ACPI: acpi_listen does not exists
2022-09-26 16:58:27 [ DEBUG ] browser.js 125: Initializing Browser Window
2022-09-26 16:58:27 [ DEBUG ] browser.js 177: Browser Window created
2022-09-26 16:58:27 [ DEBUG ] screensaver.js 42: Screensaver set
2022-09-26 16:58:27 [ DEBUG ] browser.js 122: Theme loaded
2022-09-26 16:58:27 [ DEBUG ] globals.js 16: Javascript logger is ready
2022-09-26 16:58:27 [ DEBUG ] globals.js 13: Window is ready
2022-09-26 16:58:27 [ ERROR ] bridge.js 53: Error: Unable to determine socket to daemon
    at new Greeter (/opt/nody-greeter/resources/app.asar/js/bridge/bridge.js:49:28)
    at Function.getInstance (/opt/nody-greeter/resources/app.asar/js/bridge/bridge.js:99:52)
    at /opt/nody-greeter/resources/app.asar/js/bridge/bridge.js:718:37
[3629:0926/165827.822005:ERROR:browser_main_loop.cc(269)] <unknown>: lightdm_greeter_ensure_shared_data_dir_sync: assertion 'priv->connected' failed
2022-09-26 16:58:27 [ DEBUG ] bridge.js 70: LightDM API connected
[3629:0926/165829.517555:ERROR:browser_main_loop.cc(269)] <unknown>: lightdm_greeter_cancel_authentication: assertion 'priv->connected' failed
[3629:0926/165829.517871:ERROR:browser_main_loop.cc(269)] <unknown>: lightdm_greeter_authenticate: assertion 'priv->connected' failed
2022-09-26 16:58:29 [ DEBUG ] browser.js 198: Nody Greeter started win: 0

Bug description

Litervan theme can not recognize correct resolution at 3840x2160. But correctly work at 1280x1024.

nody-greeter --debug shows that a threshold size makes this anomalous. The screenshot below shows this.

I have used this theme before based on lightdm-webkit2-greeter in the same environment, at that time it worked correctly.
I check base gruvbox theme, it work correctly

Steps to reproduce

Build the latest nody-greeter and litervan themes and run them at 3840x2160.

Screenshots

2022-09-26-16-59-07
this works normally
2022-09-26-16-59-36
this works anomaly

Issue with build.js when running sudo node make install

Environment

  • OS: Ubuntu Mate 22.04
  • nody-greeter version: output of nody-greeter --version

Bug description

Syntax error during sudo node make install

Steps to reproduce

followed the instructions without issue and then received an error in the sudo node make install

Expected behavior

Install

Screenshots

`(node:2683) UnhandledPromiseRejectionWarning: /home/joe/nody-greeter/build.js:176
const minor = electronMatch.groups.minor ?? "0";
^

SyntaxError: Unexpected token '?'
at wrapSafe (internal/modules/cjs/loader.js:915:16)
at Module._compile (internal/modules/cjs/loader.js:963:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at Module.require (internal/modules/cjs/loader.js:887:19)
at require (internal/modules/cjs/helpers.js:74:18)
at do_install (/home/joe/nody-greeter/make.js:62:21)
at Object. (/home/joe/nody-greeter/make.js:85:3)
at Module._compile (internal/modules/cjs/loader.js:999:30)
(node:2683) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:2683) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
`

LightDM doesn't load greeter in Fedora 36 Cinnamon

Environment

  • OS: Fedora 36 Cinnamon
  • nody-greeter version: 1.5.1

Bug description

Nody greeter runs in debug mode, but lightdm refuses to load it. Either it defaults to a different greeter on the system, or if I remove all other greeters, lightdm loads no greeter and I have to boot to terminal and reinstall lightdm-gtk.

Steps to reproduce default greeter loading

  • Follow install instructions with equivalent packages for Fedora 36.
  • Configure lightdm.conf #greeter-session=nody-greeter
  • Restart lightdm service
  • Loads other greeter installed

Steps to reproduce no greeter loading

  • Follow install instructions with equivalent packages for Fedora 36.
  • Remove all other greeters
  • Configure lightdm.conf #greeter-session=nody-greeter
  • Restart lightdm service
  • Loads no greeter and can't login

Expected behavior

  • Lightdm loads nody-greeter

Debug output

[10150:1020/001501.301269:ERROR:node_bindings.cc(242)] Error parsing Node.js cli flags
2022-10-20 00:15:01 [ DEBUG ] acpi.js 66: Restarting acpi_listen
2022-10-20 00:15:01 [ DEBUG ] browser.js 125: Initializing Browser Window
2022-10-20 00:15:01 [ DEBUG ] browser.js 177: Browser Window created
2022-10-20 00:15:01 [ DEBUG ] screensaver.js 42: Screensaver set
2022-10-20 00:15:01 [ DEBUG ] browser.js 122: Theme loaded
2022-10-20 00:15:01 [ DEBUG ] globals.js 16: Javascript logger is ready
2022-10-20 00:15:01 [ DEBUG ] globals.js 13: Window is ready
2022-10-20 00:15:01 [ DEBUG ] bridge.js 70: LightDM API connected
2022-10-20 00:15:01 [ DEBUG ] acpi.js 66: Restarting acpi_listen
2022-10-20 00:15:01 [ DEBUG ] acpi.js 66: Restarting acpi_listen
2022-10-20 00:15:01 [ DEBUG ] acpi.js 66: Restarting acpi_listen
2022-10-20 00:15:01 [ DEBUG ] acpi.js 66: Restarting acpi_listen
[10183:1020/001503.384845:ERROR:sandbox_linux.cc(376)] InitializeSandbox() called with multiple threads in process gpu-process.
2022-10-20 00:15:03 [ DEBUG ] browser.js 198: Nody Greeter started win: 2785062953156674

Screenshots

Lightdm [Seat:*] configuration
image

Nody-greeter running in debug mode

image

some themes do not work

An error occurred. Do you want to change to default theme? (gruvbox)

web-greeter://app/usr/share/web-greeter/themes/litarvan/js/chunk-vendors.cc4c1bca.js 7: TypeError: lightdm.language.toLowerCase is not a function

nody-greeter doesnt work, but web-greeter does

Environment

  • OS: Pop_OS! 22.04
  • nody-greeter version: 1.4.1

Bug description

When starting I'm greeted with a blinking cursor

Steps to reproduce

Install as described

Expected behavior

Work like normal

Logs

/var/log/lightdm/lightdm.log

[+0.00s] DEBUG: Logging to /var/log/lightdm/lightdm.log
[+0.00s] DEBUG: Starting Light Display Manager 1.30.0, UID=0 PID=83393
[+0.00s] DEBUG: Loading configuration dirs from /usr/share/lightdm/lightdm.conf.d
[+0.00s] DEBUG: Loading configuration from /usr/share/lightdm/lightdm.conf.d/50-disable-guest.conf
[+0.00s] DEBUG: Loading configuration from /usr/share/lightdm/lightdm.conf.d/50-disable-log-backup.conf
[+0.00s] DEBUG: Loading configuration from /usr/share/lightdm/lightdm.conf.d/50-greeter-wrapper.conf
[+0.00s] DEBUG: Loading configuration from /usr/share/lightdm/lightdm.conf.d/50-guest-wrapper.conf
[+0.00s] DEBUG: Loading configuration from /usr/share/lightdm/lightdm.conf.d/50-xserver-command.conf
[+0.00s] DEBUG: Loading configuration from /usr/share/lightdm/lightdm.conf.d/60-lightdm-gtk-greeter.conf
[+0.00s] DEBUG: Loading configuration dirs from /usr/local/share/lightdm/lightdm.conf.d
[+0.00s] DEBUG: Loading configuration dirs from /etc/xdg/lightdm/lightdm.conf.d
[+0.00s] DEBUG: Loading configuration from /etc/xdg/lightdm/lightdm.conf.d/90-greeter-wrapper.conf
[+0.00s] DEBUG: Loading configuration from /etc/lightdm/lightdm.conf
[+0.00s] DEBUG: Registered seat module local
[+0.00s] DEBUG: Registered seat module xremote
[+0.00s] DEBUG: Using D-Bus name org.freedesktop.DisplayManager
[+0.00s] DEBUG: _g_io_module_get_default: Found default implementation local (GLocalVfs) for ‘gio-vfs’
[+0.00s] DEBUG: Monitoring logind for seats
[+0.00s] DEBUG: New seat added from logind: seat0
[+0.00s] DEBUG: Seat seat0: Loading properties from config section Seat:*
[+0.00s] DEBUG: Seat seat0 has property CanMultiSession=no
[+0.00s] DEBUG: Seat seat0: Starting
[+0.00s] DEBUG: Seat seat0: Creating greeter session
[+0.00s] DEBUG: Seat seat0: Creating display server of type x
[+0.00s] DEBUG: Using VT 7
[+0.00s] DEBUG: Seat seat0: Starting local X display on VT 7
[+0.00s] DEBUG: XServer 0: Logging to /var/log/lightdm/x-0.log
[+0.00s] DEBUG: XServer 0: Writing X server authority to /var/run/lightdm/root/:0
[+0.00s] DEBUG: XServer 0: Launching X Server
[+0.00s] DEBUG: Launching process 83399: /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
[+0.00s] DEBUG: XServer 0: Waiting for ready signal from X server :0
[+0.00s] DEBUG: Acquired bus name org.freedesktop.DisplayManager
[+0.00s] DEBUG: Registering seat with bus path /org/freedesktop/DisplayManager/Seat0
[+0.00s] DEBUG: Loading users from org.freedesktop.Accounts
[+0.00s] DEBUG: User /org/freedesktop/Accounts/User1000 added
[+0.02s] DEBUG: Seat seat0 changes active session to
[+0.92s] DEBUG: Got signal 10 from process 83399
[+0.92s] DEBUG: XServer 0: Got signal from X server :0
[+0.92s] DEBUG: XServer 0: Connecting to XServer :0
[+0.92s] DEBUG: Seat seat0: Display server ready, starting session authentication
[+0.92s] DEBUG: Session pid=83408: Started with service 'lightdm-greeter', username 'lightdm'
[+0.95s] DEBUG: Session pid=83408: Authentication complete with return value 0: Success
[+0.95s] DEBUG: Seat seat0: Session authenticated, running command
[+0.95s] DEBUG: Session pid=83408: Running command /etc/lightdm/Xgreeter /usr/bin/nody-greeter
[+0.95s] DEBUG: Creating shared data directory /var/lib/lightdm-data/lightdm
[+0.95s] DEBUG: Session pid=83408: Logging to /var/log/lightdm/seat0-greeter.log
[+0.97s] DEBUG: Activating VT 7
[+1.45s] DEBUG: Greeter connected version=1.30.0 api=1 resettable=false
[+1.45s] DEBUG: Greeter requests data directory for user crylia
[+1.45s] DEBUG: Creating shared data directory /var/lib/lightdm-data/crylia
[+2.48s] DEBUG: Session pid=83408: Exited with return value 1
[+2.48s] DEBUG: Seat seat0: Session stopped
[+2.48s] DEBUG: Seat seat0: Stopping; failed to start a greeter
[+2.48s] DEBUG: Seat seat0: Stopping
[+2.48s] DEBUG: Seat seat0: Stopping display server
[+2.48s] DEBUG: Sending signal 15 to process 83399
[+3.07s] DEBUG: Process 83399 exited with return value 0
[+3.07s] DEBUG: XServer 0: X server stopped
[+3.07s] DEBUG: Releasing VT 7
[+3.07s] DEBUG: XServer 0: Removing X server authority /var/run/lightdm/root/:0
[+3.07s] DEBUG: Seat seat0: Display server stopped
[+3.07s] DEBUG: Seat seat0: Stopped
[+3.07s] DEBUG: Required seat has stopped
[+3.07s] DEBUG: Stopping display manager
[+3.07s] DEBUG: Display manager stopped
[+3.07s] DEBUG: Stopping daemon
[+3.07s] DEBUG: Exiting with return value 1
[+0.00s] DEBUG: Logging to /var/log/lightdm/lightdm.log
[+0.00s] DEBUG: Starting Light Display Manager 1.30.0, UID=0 PID=85579
[+0.00s] DEBUG: Loading configuration dirs from /usr/share/lightdm/lightdm.conf.d
[+0.00s] DEBUG: Loading configuration from /usr/share/lightdm/lightdm.conf.d/50-disable-guest.conf
[+0.00s] DEBUG: Loading configuration from /usr/share/lightdm/lightdm.conf.d/50-disable-log-backup.conf
[+0.00s] DEBUG: Loading configuration from /usr/share/lightdm/lightdm.conf.d/50-greeter-wrapper.conf
[+0.00s] DEBUG: Loading configuration from /usr/share/lightdm/lightdm.conf.d/50-guest-wrapper.conf
[+0.00s] DEBUG: Loading configuration from /usr/share/lightdm/lightdm.conf.d/50-xserver-command.conf
[+0.00s] DEBUG: Loading configuration from /usr/share/lightdm/lightdm.conf.d/60-lightdm-gtk-greeter.conf
[+0.00s] DEBUG: Loading configuration dirs from /usr/local/share/lightdm/lightdm.conf.d
[+0.00s] DEBUG: Loading configuration dirs from /etc/xdg/lightdm/lightdm.conf.d
[+0.00s] DEBUG: Loading configuration from /etc/xdg/lightdm/lightdm.conf.d/90-greeter-wrapper.conf
[+0.00s] DEBUG: Loading configuration from /etc/lightdm/lightdm.conf
[+0.00s] DEBUG: Using Xephyr for X servers
[+0.00s] DEBUG: Registered seat module local
[+0.00s] DEBUG: Registered seat module xremote
[+0.00s] DEBUG: Using D-Bus name org.freedesktop.DisplayManager
[+0.00s] DEBUG: _g_io_module_get_default: Found default implementation local (GLocalVfs) for ‘gio-vfs’
[+0.00s] DEBUG: Monitoring logind for seats
[+0.00s] DEBUG: New seat added from logind: seat0
[+0.00s] DEBUG: Seat seat0: Loading properties from config section Seat:*
[+0.00s] DEBUG: Seat seat0 has property CanMultiSession=no
[+0.00s] DEBUG: Seat seat0: Starting
[+0.00s] DEBUG: Seat seat0: Creating greeter session
[+0.00s] DEBUG: Seat seat0: Creating display server of type x
[+0.00s] DEBUG: Using VT 7
[+0.00s] DEBUG: Seat seat0: Starting local X display on VT 7
[+0.00s] DEBUG: XServer 0: Logging to /var/log/lightdm/x-0.log
[+0.00s] DEBUG: XServer 0: Writing X server authority to /var/run/lightdm/root/:0
[+0.00s] DEBUG: XServer 0: Launching X Server
[+0.00s] DEBUG: Launching process 85585: /usr/bin/Xephyr :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
[+0.00s] DEBUG: XServer 0: Waiting for ready signal from X server :0
[+0.00s] DEBUG: Acquired bus name org.freedesktop.DisplayManager
[+0.00s] DEBUG: Registering seat with bus path /org/freedesktop/DisplayManager/Seat0
[+0.00s] DEBUG: Loading users from org.freedesktop.Accounts
[+0.00s] DEBUG: User /org/freedesktop/Accounts/User1000 added
[+0.01s] DEBUG: Process 85585 exited with return value 1
[+0.01s] DEBUG: XServer 0: X server stopped
[+0.01s] DEBUG: Releasing VT 7
[+0.01s] DEBUG: XServer 0: Removing X server authority /var/run/lightdm/root/:0
[+0.01s] DEBUG: Seat seat0: Display server stopped
[+0.01s] DEBUG: Seat seat0: Stopping session
[+0.01s] DEBUG: Seat seat0: Session stopped
[+0.01s] DEBUG: Seat seat0: Stopping display server, no sessions require it
[+0.01s] DEBUG: Seat seat0: Stopping; greeter display server failed to start
[+0.01s] DEBUG: Seat seat0: Stopping
[+0.01s] DEBUG: Seat seat0: Stopped
[+0.01s] DEBUG: Required seat has stopped
[+0.01s] DEBUG: Stopping display manager
[+0.01s] DEBUG: Display manager stopped
[+0.01s] DEBUG: Stopping daemon
[+0.01s] DEBUG: Exiting with return value 1

/var/log/lightdm/seat0-greeter.log

** (process:83408): WARNING **: 19:47:22.282: Failed to open CK session: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.ConsoleKit was not provided by any .service files
2022-04-26 19:47:22 [ WARN ] config.js 220: Theme config was not loaded:
	Error: ENOENT: no such file or directory, open '/usr/share/web-greeter/themes/glorious-fork/index.yml' (tried to rename index.html to index.yml, this just dumped the content as an error)
2022-04-26 19:47:22 [ DEBUG ] config.js 221: Using default theme config
2022-04-26 19:47:22 [ DEBUG ] browser.js 121: Initializing Browser Window
2022-04-26 19:47:22 [ DEBUG ] browser.js 173: Browser Window created
2022-04-26 19:47:22 [ DEBUG ] screensaver.js 40: Screensaver set
2022-04-26 19:47:22 [ DEBUG ] browser.js 118: Theme loaded
2022-04-26 19:47:22 [ DEBUG ] globals.js 16: Javascript logger is ready
2022-04-26 19:47:22 [ DEBUG ] globals.js 13: Window is ready
2022-04-26 19:47:22 [ DEBUG ] bridge.js 65: LightDM API connected
[83416:0426/194723.711881:FATAL:gpu_data_manager_impl_private.cc(415)] GPU process isn't usable. Goodbye.

Sorry to bother you again but It worked fine on my laptop but not on my main PC. It should in theory be the same installation with similar packaged. For some reason web-greeter works just fine.

Weird dependencies on .deb installer

Environment

  • OS: Mint 20.3 xfce x86_64
  • nody-greeter version: 1.5.2

Description of feature

The Ubuntu install package (.deb) seems to have some unneeded dependencies that make the installation larger than it needs.

The install of the whole gcc and g++ compilers seems off.
The package should need only the libraries like libstdc++ for example and not the whole compiler.
This should make the installation way faster and lighter.

Possible solutions

It could be done the dumb way 😄

  • Install all build dependencies on a docker image, i.e ubuntu:latest
  • Build the package to a custom install folder
  • Copy this folder to a clean ubuntu docker image
  • Run it
  • Go on installing all that is asked for and write it down

Error when running npm run build

Environment

  • OS: arch
  • nodejs version: 18.16.1
  • nody-greeter version: Error when trying to get it

Bug description

Trying to test if nody-greeter succefully built, getting this error like in this issue #31

A JavaScript error occurred in the main process
Uncaught Exception:
Error: Cannot find module 'yargs'
Require stack:
- /opt/nody-greeter/resources/app.asar/js/index.js
-
    at Module._resolveFilename (node:internal/modules/cjs/loader:940:15)
    at Function.n._resolveFilename (node:electron/js2c/browser_init:249:1128)
    at Module._load (node:internal/modules/cjs/loader:785:27)
    at Function.c._load (node:electron/js2c/asar_bundle:5:13331)
    at Module.require (node:internal/modules/cjs/loader:1012:19)
    at require (node:internal/modules/cjs/helpers:94:18)
    at Object.<anonymous> (/opt/nody-greeter/resources/app.asar/js/index.js:30:33)
    at Module._compile (node:internal/modules/cjs/loader:1116:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1169:10)
    at Module.load (node:internal/modules/cjs/loader:988:32)

Step tried

I tried to rebuilt the package after removing build/nody-asar, download again, checked if the yargs module was there, keeping the same error.

Any idea on what might be happening?

AUR package request

Environment

  • OS: Arch Linux

Description of feature

Hi, I found your project and it seems to be a good alternative to the dead lightdm-webkit2-greeter. Any chance of making an AUR package.

"dpkg" doesn't work on Arch Linux

Environment

  • OS: Arch Linux
  • nody-greeter version: output of nody-greeter --version

Description of feature

Dpkg doesn't work on Arch Linux. Is there any other alternative?

Hidpi

Environment

  • OS: [e.g. Arch]
  • HiDPI support ?
  • if there how to enable it?

Not starting anymore, GPU process isn't usable. Goodbye?

Environment

  • OS: Pop_OS! 22.04
  • nody-greeter version: 1.4.1

Bug description

Trying to start gives me the following output Logs

Steps to reproduce

*Reinstalled as described

Expected behavior

It should start

##Logs
2022-04-26 01:47:44 [ DEBUG ] browser.js 121: Initializing Browser Window
2022-04-26 01:47:44 [ DEBUG ] browser.js 173: Browser Window created
2022-04-26 01:47:44 [ DEBUG ] screensaver.js 40: Screensaver set
2022-04-26 01:47:44 [ DEBUG ] browser.js 118: Theme loaded
2022-04-26 01:47:44 [ DEBUG ] globals.js 16: Javascript logger is ready
2022-04-26 01:47:44 [ DEBUG ] globals.js 13: Window is ready
2022-04-26 01:47:44 [ ERROR ] bridge.js 48: Error: Unable to determine socket to daemon
2022-04-26 01:47:44 [ DEBUG ] bridge.js 65: LightDM API connected
[37985:0426/014745.377460:FATAL:gpu_data_manager_impl_private.cc(415)] GPU process isn't usable. Goodbye.
[1] 37985 trace trap (core dumped) nody-greeter --debug

/etc/lightdm/lightdm.conf

[Seat:*]
greeter-session=nody-greeter (using the default greeter works)
greeter-setup-script=/usr/bin/numlockx on (tried removing it, changed nothing)

/etc/lightdm/web-greeter.yml

Default config.

*I did a complete reinstall since it stopped working after the update from 21.10 --> 22.04

npm run build failing

Environment

  • OS: Pop!_OS 22.04
  • nody-greeter version: well ...

Bug description

Trying to do anything with nody-greeter in the terminal outputs this:

A JavaScript error occurred in the main process
Uncaught Exception:
Error: Cannot find module 'yargs'
Require stack:
- /opt/nody-greeter/resources/app.asar/js/index.js
-
    at Module._resolveFilename (node:internal/modules/cjs/loader:940:15)
    at Function.n._resolveFilename (node:electron/js2c/browser_init:249:1128)
    at Module._load (node:internal/modules/cjs/loader:785:27)
    at Function.c._load (node:electron/js2c/asar_bundle:5:13331)
    at Module.require (node:internal/modules/cjs/loader:1012:19)
    at require (node:internal/modules/cjs/helpers:94:18)
    at Object.<anonymous> (/opt/nody-greeter/resources/app.asar/js/index.js:30:33)
    at Module._compile (node:internal/modules/cjs/loader:1116:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1169:10)
    at Module.load (node:internal/modules/cjs/loader:988:32)

Steps to reproduce

Installed by building myself as describes in this repo

Literally no idea whats happening

Unable to cancel authentication

Environment

  • OS: Arch Linux 6.0.9
  • nody-greeter version: 1.5.1

Bug description

Unable to cancel authentication via lightdm.cancel_authentication() nor failing password.

Steps to reproduce

lightdm.authenticate("user")
lightdm.respond("worng password")
lightdm.in_authentication -> true
llightdm.cancel_authentication()
lightdm.in_authentication -> true

Expected behavior

When password is failed or lightdm.cancel_authentication() called set lightdm.in_authentication to false

Getting "Error: Cannot find module 'yargs'" at runtime on seat0 logs

Environment

  • OS: Arch Linux
  • nody-greeter version: 1.5.2

Bug description

@JezerM I installed nody-greeter by AUR package. After the install, when I run it by using the default gruvbox theme, at reboot nothing happens. I checked all LightDM logs and the only log file with errors was the one related to the seat0 (/var/log/lightdm/seat0-greeter.log) (so related to the nody-greeter). It produced the following error:

/etc/lightdm/Xgreeter: line 5: xsetroot: command not found
A JavaScript error occurred in the main process
Uncaught Exception:
Error: Cannot find module 'yargs'
Require stack:
- /opt/nody-greeter/resources/app.asar/js/index.js
- 
    at Module._resolveFilename (node:internal/modules/cjs/loader:940:15)
    at Function.n._resolveFilename (node:electron/js2c/browser_init:249:1128)
    at Module._load (node:internal/modules/cjs/loader:785:27)
    at Function.c._load (node:electron/js2c/asar_bundle:5:13331)
    at Module.require (node:internal/modules/cjs/loader:1012:19)
    at require (node:internal/modules/cjs/helpers:94:18)
    at Object.<anonymous> (/opt/nody-greeter/resources/app.asar/js/index.js:30:33)
    at Module._compile (node:internal/modules/cjs/loader:1116:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1169:10)
    at Module.load (node:internal/modules/cjs/loader:988:32)
[1097:1007/101325.882504:ERROR:sandbox_linux.cc(376)] InitializeSandbox() called with multiple threads in process gpu-process.
[1008:1007/101326.135672:ERROR:object_proxy.cc(642)] Failed to call method: org.freedesktop.DBus.Properties.Get: object_path= /org/freedesktop/portal/desktop: org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.FileChooser”
[1008:1007/101326.135701:ERROR:select_file_dialog_impl_portal.cc(243)] Failed to read portal version property

I tried to install yargs module by npm install yargs but I'm continuing to get the same result.

Steps to reproduce

  • On a clean Arch Linux environment with an AUR helper (like yay or paru) or by using Chaotic AUR repository, install [nody-greeter(https://aur.archlinux.org/packages/nody-greeter) package
  • Edit /etc/lightdm/lightdm.conf and add nody-greeter in the greeter-session field
  • sudo systemctl enable lightdm
  • Reboot
  • Nothing should happen
  • Check logs in /var/log/lightdm/seat0-greeter.log

Expected behavior

Theme appearing at login time.

npx tsc install issuse

Environment

  • OS: Ubuntu 21.04
  • nody-greeter version: output of nody-greeter --version

Bug description

when I do npx tsc it errors

Steps to reproduce

Unknown.

Expected behavior

npx tsc working and me being able to move on in install

Screenshots

image

Error while starting - nody-greeter --debug

Environment

  • OS: Arch linux DE: XFCE
  • nody-greeter version: output of nody-greeter --version 1.3.0

Bug description

All the build steps work fine but running nody-greeter --debug throws below error

Steps to reproduce

nody-greeter --debug throws erros

Expected behavior

Should open the greeter with specified theme

Screenshots

nody-greeter-issue

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.