Debian and Ubuntu (at least), in their standard configuration, have a /etc/profile.d/ directory from which any containing file ending by .sh are sourced by /etc/profile.
This is very practical for adding configurations, but makes users thinking this is the proper place for dropping their new settings, whereas this is not always true.
I don't understand why they didn't do the same for /etc/bash.bashrc, I hope they will do it in some future, but in the meantime, I did it myself:
Create a new directory at /etc/bash.bashrc.d/
Similarly to what exists in /etc/profile, add the following lines at the end of /etc/bash.bashrc:
if test -d /etc/bash.bashrc.d/; then
for bashrc in /etc/bash.bashrc.d/*.sh; do
test -r "$bashrc" && . "$bashrc"
Starting from now, drop files needed for non-interactive shells in /etc/bash.bashrc.d/ rather than in /etc/profile.d/.
That way, the only change needed to existing files is at the end of /etc/bash.bashrc.
I think this is the main reasons for users complaining about their profile not loaded, but actually their profile may not NEED to be loaded.
Maybe you could read this about this subject.