tomm / cryptkeeper Goto Github PK
View Code? Open in Web Editor NEWA system tray (gnome, xfce, kde) applet that manages EncFS encrypted folders.
Home Page: http://tom.noflag.org.uk/cryptkeeper.html
License: GNU General Public License v3.0
A system tray (gnome, xfce, kde) applet that manages EncFS encrypted folders.
Home Page: http://tom.noflag.org.uk/cryptkeeper.html
License: GNU General Public License v3.0
The System tray work differently in Unity, and so nothing shows up when Cryptkeeper is started in recent Ubuntu's (unless running classic).
I'd like to have something that will listen on inotify for /media/ directory and everytime the inotify is received it will scan for /media/*/*/.encfs*
files and if it will found such file (eg.: /media/USBdrive/.private/.encfs6.xml
) it will mount it (eg.: as /media/USBdrive-private
) using GTK dialog to ask for password.
I love cryptkeeper. Thank you for it!
It is possible for a user -- at least this one -- to (after closing the application) believe the relevant folders are now inaccessible, but in fact they are left open. If a popup window asked them whether to do that when they tried to quit, it would be safer for the kind of user who makes that assumption.
Checkbox remains checked when automatically unmount after idle time expires.
so as a result - I have to click the checkbox against mount point in menu twice!!
In case there are two users (ondra & jarka) logged in on the computer, both using GVFS FUSE (gnome virtual filesystem FUSE plugin). Output of mount looks e.g. like this:
ondra@hippie:/home$ mount
/dev/sda6 on / type ext4 (rw,errors=remount-ro,commit=600)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
/dev/sda5 on /boot type ext2 (rw)
/dev/sda8 on /home type ext4 (rw,commit=600)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
gvfs-fuse-daemon on /home/ondra/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=ondra)
gvfs-fuse-daemon on /home/jarka/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=jarka)
encfs on /home/data/spolecne/Sifrovane type fuse.encfs (rw,nosuid,nodev,default_permissions,user=ondra)
When you run cryptkeeper as user 'ondra' and click on the tray icon it crashes. The tail of strace output looks like this:
lstat64("/proc", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat64("/proc/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat64("/proc/sys/fs", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat64("/proc/sys/fs/binfmt_misc", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat64("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/home/ondra", {st_mode=S_IFDIR|0755, st_size=16384, ...}) = 0
lstat64("/home/ondra/.gvfs", {st_mode=S_IFDIR|0500, st_size=0, ...}) = 0
lstat64("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/home/jarka", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/home/jarka/.gvfs", 0xbf9a799c) = -1 EACCES (Permission denied)
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Segmentation fault
forwarded from rhbz : https://bugzilla.redhat.com/show_bug.cgi?id=645923
It would be nice to have ability to remove created encrypted folder.
I found that for folder with name "A" in home directory CryptKeeper creates actual encfs directory in ~/.A_encfs. If I remove this directory "/home/username/A" folder still will be in CryptKeeper (even after it's restart), but it mounting will fail with expected error. How can I remove "/home/username/A" item from folders list in CryptKeeper?
Two small modifications are needed to make it compile on "Red Hat Enterprise Linux Server 7.5 (Maipo)"
IMPORTANT: Make this modifications before running the bootstrap-script!
(Or re-run ./bootstrap afterwards)
In file src/lsof.cpp add after:
#include <cstring>
this line:
#include <unistd.h>
In file src/Makefile.am add after:
DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
this line:
AM_LDFLAGS = -lX11
Now run:
./bootstrap
./configure
make
sudo make install
Gerhard
PS:
There seems to be no way to post comments.
Therefore i put it here under "issues".....
Great project. Thanks for doing it.
I can't find on the website where and how cryptkeeper stores the passwords. Could you clarify?
Thanks
The homepage of Cryptkeeper (http://tom.noflag.org.uk/cryptkeeper.html) has been down for a while incl. all DNS entries...
Will this be permanent and if yes what homepage should we use in package maintenance infos?
For the past few years, this has been happening fairly frequently.
When I run cryptkeeper normally, it segfaults. But if I run it with certain args, like -h or -?, then it works fine. But not with just any arg. For instance, it segfaults with -a.
This bug has been present in some form in the last 4 or 5 ubuntu distros.
It's not always consistent, although most often it is. Cryptkeeper should (and probably does) ignore the cli args anyway. So it may be due to something completely unrelated to the args.
I understand that this info may not be sufficient to debug this problem, so please, tell me what else to upload. Will provide as needed.
Hi, there is a serious security hole in cryptkeeper.
Details are in this Debian bugreport: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=852751
Here is a quote from Kirill Tkhai [email protected], who found this bug:
"I've looked into cryptkeeper code and found, it calls encfs
with -S option:
execlp ("encfs", "encfs", "-S", crypt_dir, mount_dir, NULL);
exit (0);
While the password is passed to encfs using pipe in this way:
// paranoid default setup mode
//write (fd[1], "y\n", 2);
//write (fd[1], "y\n", 2);
write (fd[1], "p\n", 2);
write (fd[1], password, strlen (password));
write (fd[1], "\n", 1);
But it seems it's wrong. When I'm executing encfs program
from console
$ encfs -S crypt_dir mount_dir
and I'm passing "p\n", encfs exits and doesn't wait for a password
itself."
This may be caused by a change in the underlying encfs interface.
When running:
make unit_test
It fails since the API has probably changed from previous versions.
Here is a patch for fixing the issue: cryptkeeper-0.9.5-unit_tests.patch
The patch has added an exit code too, so it can be used by other processes for estimations etc...
I have installed several gui :lxde , xfce4 , gnome3.
After reboot ,cryptkeeper can't decode directory ,the error info is
The stash could not be mounted. Invalid password?
To purge and reinstall cryptkeeper,same error info occur when to decode directory.
The stash could not be mounted. Invalid password?
How to fix it?
I cant select , encrypt and hide a hidden directory in Ubuntu (eg home/user/.my/folder/). Any help
I always get "The encrypted folder could not be mounted because the mount point is not empty:", while:
encfs /mnt/DropBox/Dropbox/_boxed /mnt/boxed
and sudo encfs --public /mnt/DropBox/Dropbox/_boxed /mnt/boxed
I use encfs 1.7.4, fuse 2.8.6 & Kubuntu 12.04.4 (kernel 3.2.0-61)
The current version cannot be compiled "out of the box".
I found two kinds of problems:
In particular, and to document the second one, the following happened during compilation:
g++ -g -O2 -pthread -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/harfbuzz -I/usr/include/gconf/2 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -o cryptkeeper encfs_wrapper.o ConfigDialog.o ImportStashWizard.o CreateStashWizard.o PasswordChangeDialog.o main.o gtkstatusicon.o gtktrayicon-x11.o PasswordEntryDialog.o lsof.o -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig -lgobject-2.0 -lfreetype -lgconf-2 -lglib-2.0
/usr/bin/ld: gtktrayicon-x11.o: undefined reference to symbol 'XFlush'
//usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line
Cryptkeeper is segfaulting, but only when the shares are mounted.
There are no related messages in the system logs.
At about step 3, I started stracing cryptkeeper. It always ends with the same message; pasting just after the debug message that prints the password in cleartext:
# This line was the write echo of the password
write(18, "\n", 1) = 1
close(18) = 0
poll([{fd=19, events=POLLIN}], 1, 1000) = 0 (Timeout)
wait4(3804, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 3804
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3804, si_uid=1001, si_status=0, si_utime=302, si_stime=0} ---
wait4(-1, NULL, 0, NULL) = -1 ECHILD (No child processes)
rt_sigreturn({mask=[]}) = 3804
openat(AT_FDCWD, "/etc/mtab", O_RDONLY|O_CLOEXEC) = 17
lstat("/media", {st_mode=S_IFDIR|0755, st_size=10, ...}) = 0
lstat("/media/extra", {st_mode=S_IFDIR|0755, st_size=114, ...}) = 0
lstat("/media/extra/News", {st_mode=S_IFDIR|0700, st_size=22, ...}) = 0
futex(0x7f1d8e7c5fc8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
fstat(17, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
read(17, "proc /proc proc rw,nosuid,nodev,"..., 1024) = 1024
lstat("/proc", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/dev", {st_mode=S_IFDIR|0755, st_size=3500, ...}) = 0
lstat("/run", {st_mode=S_IFDIR|0755, st_size=700, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/firmware", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/firmware/efi", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/firmware/efi/efivars", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/kernel", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/kernel/security", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/dev", {st_mode=S_IFDIR|0755, st_size=3500, ...}) = 0
lstat("/dev/shm", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=60, ...}) = 0
lstat("/dev", {st_mode=S_IFDIR|0755, st_size=3500, ...}) = 0
lstat("/dev/pts", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/cgroup", {st_mode=S_IFDIR|0755, st_size=380, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/cgroup", {st_mode=S_IFDIR|0755, st_size=380, ...}) = 0
lstat("/sys/fs/cgroup/unified", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/cgroup", {st_mode=S_IFDIR|0755, st_size=380, ...}) = 0
lstat("/sys/fs/cgroup/systemd", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/pstore", {st_mode=S_IFDIR|0750, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/bpf", {st_mode=S_IFDIR|S_ISVTX|0700, st_size=0, ...}) = 0
read(17, "ev,noexec,relatime,pids 0 0\ncgro"..., 1024) = 1024
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/cgroup", {st_mode=S_IFDIR|0755, st_size=380, ...}) = 0
lstat("/sys/fs/cgroup/pids", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/cgroup", {st_mode=S_IFDIR|0755, st_size=380, ...}) = 0
lstat("/sys/fs/cgroup/freezer", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/cgroup", {st_mode=S_IFDIR|0755, st_size=380, ...}) = 0
lstat("/sys/fs/cgroup/cpu,cpuacct", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/cgroup", {st_mode=S_IFDIR|0755, st_size=380, ...}) = 0
lstat("/sys/fs/cgroup/net_cls,net_prio", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/cgroup", {st_mode=S_IFDIR|0755, st_size=380, ...}) = 0
lstat("/sys/fs/cgroup/memory", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/cgroup", {st_mode=S_IFDIR|0755, st_size=380, ...}) = 0
lstat("/sys/fs/cgroup/hugetlb", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/cgroup", {st_mode=S_IFDIR|0755, st_size=380, ...}) = 0
lstat("/sys/fs/cgroup/rdma", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/cgroup", {st_mode=S_IFDIR|0755, st_size=380, ...}) = 0
lstat("/sys/fs/cgroup/blkio", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/cgroup", {st_mode=S_IFDIR|0755, st_size=380, ...}) = 0
lstat("/sys/fs/cgroup/perf_event", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/cgroup", {st_mode=S_IFDIR|0755, st_size=380, ...}) = 0
lstat("/sys/fs/cgroup/devices", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/cgroup", {st_mode=S_IFDIR|0755, st_size=380, ...}) = 0
lstat("/sys/fs/cgroup/cpuset", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/dev", {st_mode=S_IFDIR|0755, st_size=3500, ...}) = 0
lstat("/dev/hugepages", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/dev", {st_mode=S_IFDIR|0755, st_size=3500, ...}) = 0
lstat("/dev/mqueue", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=40, ...}) = 0
read(17, "p=1,timeout=0,minproto=5,maxprot"..., 1024) = 967
lstat("/proc", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/proc/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/proc/sys/fs", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/proc/sys/fs/binfmt_misc", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
brk(0x55969d46a000) = 0x55969d46a000
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/kernel", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/kernel/debug", {st_mode=S_IFDIR|0700, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/kernel", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/kernel/config", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=600, ...}) = 0
lstat("/home", {st_mode=S_IFDIR|0755, st_size=6, ...}) = 0
lstat("/boot", {st_mode=S_IFDIR|0755, st_size=260, ...}) = 0
lstat("/boot/efi", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/fs", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/fuse", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/fs/fuse/connections", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/run", {st_mode=S_IFDIR|0755, st_size=700, ...}) = 0
lstat("/run/user", {st_mode=S_IFDIR|0755, st_size=60, ...}) = 0
lstat("/run/user/1001", {st_mode=S_IFDIR|0700, st_size=280, ...}) = 0
lstat("/run", {st_mode=S_IFDIR|0755, st_size=700, ...}) = 0
lstat("/run/user", {st_mode=S_IFDIR|0755, st_size=60, ...}) = 0
lstat("/run/user/1001", {st_mode=S_IFDIR|0700, st_size=280, ...}) = 0
lstat("/run/user/1001/gvfs", {st_mode=S_IFDIR|0500, st_size=0, ...}) = 0
lstat("/sys", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat("/sys/kernel", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
lstat("/sys/kernel/debug", {st_mode=S_IFDIR|0700, st_size=0, ...}) = 0
lstat("/sys/kernel/debug/tracing", 0x7ffe4aff70e0) = -1 EACCES (Permission denied)
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=NULL} ---
+++ killed by SIGSEGV (core dumped) +++
[1] 3428 segmentation fault (core dumped) strace cryptkeeper
โ
The last message is always that Permission denied
trying to look into debug/tracing
.
Cryptkeeper: 0.9.5-6
encfs: 1.9.5-2
Distro: Linux glamdring 4.19.34-1-MANJARO #1 SMP PREEMPT Sat Apr 6 08:28:55 UTC 2019 x86_64 GNU/Linux
The share is being created on an SSD with btrfs as the parent filesystem.
Since this hasn't been updated in 10 years, is anyone maintaining or running an updated fork?
If not, might take up captaincy.
configure
works fine, but during make
, warnings seem to get treated as errors despite -Wno-error
and the build fails. The last command ran inside of src
is:
g++ -DLOCALEDIR=\"/usr/share/locale\" -DHAVE_CONFIG_H -I. -I.. -g2 -O3 -pipe -fPIC -Wformat -Wformat-security -malign-data=abi -fno-omit-frame-pointer -fexceptions -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param ssp-buffer-size=32 -fasynchronous-unwind-tables -ftree-loop-distribute-patterns -fno-semantic-interposition -ftree-vectorize -ftree-loop-vectorize -feliminate-unused-debug-types -Wall -Wno-error -Wp,-D_REENTRANT -pthread -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/libdrm -I/usr/include/libpng15 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng15 -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/gconf/2 -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -MT lsof.o -MD -MP -MF .deps/lsof.Tpo -c -o lsof.o lsof.cpp
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.