OSX no reconoce la tecla Bloq Despl en mi keyboard USB externo

Estoy intentando compartir mi monitor y keyboard / mouse entre mi PC (Windows 7) y Macbook Pro (1,1 – 2006, Snow Leopard) usando un conmutador KVM básico (Trendnet TK207).

Al presionar el Bloqueo de desplazamiento dos veces, el KVM cambia de una computadora a otra. El problema es que esto funciona en Windows pero no en OS X. OS X no reconoce mi tecla de Bloq Despl en absoluto (incluso la luz de Bloq Despl no funciona).

¿Alguna idea sobre cómo depurar / corregir este problema?

  • ¿Cómo configuro una contraseña de firmware en una MacBook Air?
  • ¿Cómo puedo incrustar una image en una firma de Apple Mail?
  • ¿Puedo eliminar una segunda installation de Mac OS X?
  • Volumen pnetworkingeterminado demasiado alto para auriculares
  • ¿Cómo hacer una unidad USB de arranque desde Install OS X El Capitan.app?
  • Actualice iMovie en OS X 10.6.8
  • correo de manzana 4.5 max. El tamaño de export de mbox está limitado a aprox. 4.7GB
  • ¿Cómo puede un usuario ser más rápido que el otro?
  • One Solution collect form web for “OSX no reconoce la tecla Bloq Despl en mi keyboard USB externo”

    Hice una pequeña utilidad de command-line para arreglar esto para mi Trendnet TK-204UK. El truco consiste en alternar el estado del LED de locking de desplazamiento en el keyboard, ya que parece que está monitorizado por el interruptor. Mac no suele alternar el LED cuando presiona la tecla Bloq Despl. Encontré un progtwig de ejemplo de Apple (herramienta de testing LED HID) que tiene acceso de bajo nivel al keyboard y lo modificó para mostrar el LED de Bloq Despl. Lo llamé kvm, lo puse en mi / usr / local / bin y bingo sin necesidad de pasar debajo del escritorio para hacer lo que compré para hacer este cambio. Aquí está la function principal modificada del file main.c del proyecto HID_LED_test_tool. Tenga en count que probablemente tendrá que cambiar una configuration del proyecto Xcode para comstackrlo con el 10.7 SDK porque está configurado para usar 10.5.

    — actualización —

    Esta solución funciona (muchas gracias) pero te falta algo del código. Necesitas ir a http://developer.apple.com/library/mac/#samplecode/HID_LED_test_tool/Listings/main_c.html y get la function declarada en la parte superior.

    También para cualquier persona que no sepa qué hacer con esto, debe crear una nueva aplicación de command-line OS X en Xcode y comstackr esto. Luego puede ejecutarlo para cambiar su KVM. También necesitará agregar CoreFoundation.framework y IOKit.framework a la compilation.

    — fin de la actualización —

    — actualización 2 —

    Me acabo de dar count de que si en lugar de crear una "aplicación de OS X de command-line", creas una "Aplicación de Cacao" y luego borras todo a exception de main.m y vuelves a colocar el código a continuación, en vez de eso crearás una aplicación "normal" de una aplicación de 'línea de command' y que se iniciará más rápido (sin cargar el terminal) y puede conectarse en el muelle, etc. Si va con la "Aplicación Cocoa" tendrá que actualizar algunas de las configuraciones de compilation para corresponde a los files que eliminas

    — final actualización 2 —

    // // main.m // // **************************************************** #pragma mark - #pragma mark * complation directives * // ---------------------------------------------------- #ifndef FALSE #define FALSE 0 #define TRUE !FALSE #endif // **************************************************** #pragma mark - #pragma mark * includes & imports * // ---------------------------------------------------- #include <CoreFoundation/CoreFoundation.h> #include <Carbon/Carbon.h> #include <IOKit/hid/IOHIDLib.h> // **************************************************** #pragma mark - #pragma mark * typedef's, struct's, enums, defines, etc. * // ---------------------------------------------------- // function to create a matching dictionary for usage page & usage static CFMutableDictionaryRef hu_CreateMatchingDictionaryUsagePageUsage(Boolean isDeviceNotElement, UInt32 inUsagePage, UInt32 inUsage ) { // create a dictionary to add usage page / usages to CFMutableDictionaryRef result = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks ); if ( result ) { if ( inUsagePage ) { // Add key for device type to refine the matching dictionary. CFNumberRef pageCFNumberRef = CFNumberCreate( kCFAllocatorDefault, kCFNumberIntType, &inUsagePage ); if ( pageCFNumberRef ) { if ( isDeviceNotElement ) { CFDictionarySetValue( result, CFSTR( kIOHIDDeviceUsagePageKey ), pageCFNumberRef ); } else { CFDictionarySetValue( result, CFSTR( kIOHIDElementUsagePageKey ), pageCFNumberRef ); } CFRelease( pageCFNumberRef ); // note: the usage is only valid if the usage page is also defined if ( inUsage ) { CFNumberRef usageCFNumberRef = CFNumberCreate( kCFAllocatorDefault, kCFNumberIntType, &inUsage ); if ( usageCFNumberRef ) { if ( isDeviceNotElement ) { CFDictionarySetValue( result, CFSTR( kIOHIDDeviceUsageKey ), usageCFNumberRef ); } else { CFDictionarySetValue( result, CFSTR( kIOHIDElementUsageKey ), usageCFNumberRef ); } CFRelease( usageCFNumberRef ); } else { fprintf( stderr, "%s: CFNumberCreate( usage ) failed.", __PRETTY_FUNCTION__ ); } } } else { fprintf( stderr, "%s: CFNumberCreate( usage page ) failed.", __PRETTY_FUNCTION__ ); } } } else { fprintf( stderr, "%s: CFDictionaryCreateMutable failed.", __PRETTY_FUNCTION__ ); } return result; } // hu_CreateMatchingDictionaryUsagePageUsage int main( int argc, const char * argv[] ) { #pragma unused ( argc, argv ) // create a IO HID Manager reference IOHIDManagerRef tIOHIDManagerRef = IOHIDManagerCreate( kCFAllocatorDefault, kIOHIDOptionsTypeNone ); require( tIOHIDManagerRef, Oops ); // Create a device matching dictionary CFDictionaryRef matchingCFDictRef = hu_CreateMatchingDictionaryUsagePageUsage( TRUE, kHIDPage_GenericDesktop, kHIDUsage_GD_Keyboard ); require( matchingCFDictRef, Oops ); // set the HID device matching dictionary IOHIDManagerSetDeviceMatching( tIOHIDManagerRef, matchingCFDictRef ); if ( matchingCFDictRef ) { CFRelease( matchingCFDictRef ); } // Now open the IO HID Manager reference IOReturn tIOReturn = IOHIDManagerOpen( tIOHIDManagerRef, kIOHIDOptionsTypeNone ); require_noerr( tIOReturn, Oops ); // and copy out its devices CFSetRef deviceCFSetRef = IOHIDManagerCopyDevices( tIOHIDManagerRef ); require( deviceCFSetRef, Oops ); // how many devices in the set? CFIndex deviceIndex, deviceCount = CFSetGetCount( deviceCFSetRef ); // allocate a block of memory to extact the device ref's from the set into IOHIDDeviceRef * tIOHIDDeviceRefs = malloc( sizeof( IOHIDDeviceRef ) * deviceCount ); require( tIOHIDDeviceRefs, Oops ); // now extract the device ref's from the set CFSetGetValues( deviceCFSetRef, (const void **) tIOHIDDeviceRefs ); // before we get into the device loop we'll setup our element matching dictionary matchingCFDictRef = hu_CreateMatchingDictionaryUsagePageUsage( FALSE, kHIDPage_LEDs, 0 ); require( matchingCFDictRef, Oops ); int pass; // do 3 passes for ( pass = 0; pass < 3; pass++ ) { Boolean delayFlag = FALSE; // if we find an LED element we'll set this to TRUE //printf( "pass = %d.\n", pass ); for ( deviceIndex = 0; deviceIndex < deviceCount; deviceIndex++ ) { // if this isn't a keyboard device... if ( !IOHIDDeviceConformsTo( tIOHIDDeviceRefs[deviceIndex], kHIDPage_GenericDesktop, kHIDUsage_GD_Keyboard ) ) { continue; // ...skip it } //printf( " device = %p.\n", tIOHIDDeviceRefs[deviceIndex] ); // copy all the elements CFArrayRef elementCFArrayRef = IOHIDDeviceCopyMatchingElements( tIOHIDDeviceRefs[deviceIndex], matchingCFDictRef, kIOHIDOptionsTypeNone ); require( elementCFArrayRef, next_device ); // for each device on the system these values are divided by the value ranges of all LED elements found // for example, if the first four LED element have a range of 0-1 then the four least significant bits of // this value will be sent to these first four LED elements, etc. int device_value = pass; // iterate over all the elements CFIndex elementIndex, elementCount = CFArrayGetCount( elementCFArrayRef ); for ( elementIndex = 0; elementIndex < elementCount; elementIndex++ ) { IOHIDElementRef tIOHIDElementRef = ( IOHIDElementRef ) CFArrayGetValueAtIndex( elementCFArrayRef, elementIndex ); require( tIOHIDElementRef, next_element ); uint32_t usagePage = IOHIDElementGetUsagePage( tIOHIDElementRef ); uint32_t usage = IOHIDElementGetUsage( tIOHIDElementRef ); // if this isn't an LED element or the Scroll Lock key... if ( kHIDPage_LEDs != usagePage || 3 != usage ) { continue; // ...skip it } //IOHIDElementType tIOHIDElementType = IOHIDElementGetType( tIOHIDElementRef ); //printf( " element = %p (page: %d, usage: %d, type: %d ).\n", tIOHIDElementRef, usagePage, usage, tIOHIDElementType ); // get the logical mix/max for this LED element CFIndex minCFIndex = IOHIDElementGetLogicalMin( tIOHIDElementRef ); CFIndex maxCFIndex = IOHIDElementGetLogicalMax( tIOHIDElementRef ); // calculate the range CFIndex modCFIndex = maxCFIndex - minCFIndex + 1; // compute the value for this LED element CFIndex tCFIndex = minCFIndex + ( device_value % modCFIndex ); device_value /= modCFIndex; //printf( " value = 0x%08lX.\n", tCFIndex ); uint64_t timestamp = 0; // create the IO HID Value to be sent to this LED element IOHIDValueRef tIOHIDValueRef = IOHIDValueCreateWithIntegerValue( kCFAllocatorDefault, tIOHIDElementRef, timestamp, tCFIndex ); if ( tIOHIDValueRef ) { // now set it on the device tIOReturn = IOHIDDeviceSetValue( tIOHIDDeviceRefs[deviceIndex], tIOHIDElementRef, tIOHIDValueRef ); CFRelease( tIOHIDValueRef ); require_noerr( tIOReturn, next_element ); delayFlag = TRUE; // set this TRUE so we'll delay before changing our LED values again } next_element: ; continue; } next_device: ; CFRelease( elementCFArrayRef ); continue; } // if we found an LED we'll delay before continuing if ( delayFlag ) { usleep( 250000 ); // sleep 0.25 second } } // next pass if ( tIOHIDManagerRef ) { CFRelease( tIOHIDManagerRef ); } if ( matchingCFDictRef ) { CFRelease( matchingCFDictRef ); } Oops: ; return 0; } /* main */ 
    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).