I have a library structure where all users have access to the main library in:
/usr/share/kicad/library
This is fine (default).
But as it’s not possible to add new devices to the main library file, each user has an own library in:
$HOME/.local/share/kicad/library
These library files are then added to the main library parts listing. Also fine.
But as each user has no access to another user’s files, constant error messages keep appearing when KiCAD tries to open the other user’s library, as the main parts listing is common to all users???
My favorite solution would be that every user has an own main library parts listing built at startup including the common library and the local library, but excluding other users libraries.
But it just doesn’t work that way. Attempting to load a part, KiCAD tries to find parts from other users.
I am confused, the library table should be per operating system user (after all it is in ~/.config/kicad). So how can the libs of one user appear in the one of the others? Is it possible you add the user specific libs to the project library table?
If you however want all users to work on the same projects and have access to the same libs then make a special directory somewhere under /home/ where you give all users access rights (example by adding all users to the same group and give that group ownership). Then instruct all users to add these libs to their personal global library table.
By the way i made the assumption that you are under version 5
I’m not saying that the libraries of one user appears in the list of another, but that KiCAD looks for the other users’ library files and thus generates error messages.
Did I add the user specific libraries to the project? Yes, it’s possible, but I don’t know where or when I might have done that.
The scenario is that each user should have an own environment, it’s not about collaboration.
I’ll read your links, thanks, perhaps that’ll give me a clue.
EDIT: I think you’re right about the user libraries saved with the project. Now I just need to find out how to avoid this.
Check the symbol library manager. It has two tabs. One for the libraries added specifically to that project and one for the global libs. My guess is the lib in question was added to the project library table. For details see the lectures posted above.
Once @Rene_Poschl taught me the use of own environment variables.
Make new company environment variables, being the same for each computer and user.
For example {COMPANYFOOTPRINTS} = /home/localuser/.local/share/kicad/library/footprints
with localuser different for each user. Then COMPANYFOOTPRINTS will substitute the right path on each computer.
This is however not the solution here. The project lib tables should never ever have a library in them that is not referenced via the KIPRJMOD variable. In other words project local libs should (possibly must) be placed under the project root directory or a subfolder within it.
The global tables can not be the source of the issue as they are not shared between users. (Unless of course they use symbolic links or some other dirty tricks to get different users to point to the same global user specific config files)
Your suspicion that some libraries were stored with the projects turned out to be correct.
I’ve now cleaned my setup, and all libraries are now either in:
/usr/share/kicad/library
or:
$HOME/.local/share/kicad/library
The errors are gone as well.
This still leaves a problem: the personalized libraries are defined and stored with the current user, but have to be defined as “Global” to avoid the problems (making them available to all).
I’m missing a level here, perhaps specific to *NIX systems.
To my mind, libraries should be classified as “Global”, “User” and “Project”, not just “Global” or “Project”. And you can even forget the “Project” part, who needs it?
In that way, every user would have access to the default library integrated with her/his own, instead of being overwhelmed with the libararies of all users.
No they are not available to all The global library table is PER USER. (It is global in the sense that it is available in all projects of any given user)
The thing that is missing in KiCad is a way to even define libraries as global to a system (either on a computer or lets say within a company shared among all users within it).