setxkbmap -device allows a per-device layout but that's a bit iffy right now.
Test-case with two keyboards, device IDs 10 and 20, both on default "us" layout:
1. type on keyboard 10
2. setxkbmap -layout de -device 10
3. type on keyboard 10, layout on 10 is still "us"
4. type on keyboard 20, layout on 20 is "us"
5. type on keyboard 10, layout is now "de", keyboard 20 is "us", all correct now
Affects master and 1.6. I guess it's because we don't send the mapping notify for the VCK until the lastSlave changes, and the one we send in response to the XkbGetKbdByName request is a per-device request, not XkbCoreKeyboard.
Fixed with commit 8af2793a90e8e644a6a598adce3f752c15b3e37a